美文网首页
函数指针函数数组指针数组双重指针char*你怕了吗反正我怕

函数指针函数数组指针数组双重指针char*你怕了吗反正我怕

作者: 鸡大 | 来源:发表于2016-10-10 17:00 被阅读0次

    对没错这篇是C


    指针和地址和引用以及*和&

    • 指针指向一个内存空间的地址,sizeof(指针)=sizeof(int),32位为4

      • 数组的指针指向数组的地址,也是第一个数组元素的地址 eg:char* p=s; =&s; =&s[0];
      • char** 是一个双重指针,指向数组地址的指针 eg:char ** pp=&s;
    • * wc想打架为什么用*标识粗斜体

      • 声明变量的时候表示这是一个指针变量:int *p;
      • 赋值的时候表示取内容(值):int a=*p;
      • 形参表示参数类型为指针
      • 实参同赋值
    • &

      • C语言中叫取地址符,C++中叫引用,莫搞混
      • 出现在赋值语句右侧或是实参的位置,表示取元素的地址
      • 出现在赋值语句左侧或是形参,表示引用,又叫别名,其实就是元素对象本身,不new不copy,在函数中表示会直接修改传入参数的值并”返回“
      • 指针可以指向NULL,但引用不可以,引用的对象不能为空

    堆栈内存分配就先放这篇了


    C的字符串是包装程度最低的字符串

    • char *
      • char * 是c语言中的特殊结构,可以指向一个字符串(c_str),也就是一个字符数组
        eg:char * s="Hello World."
      • char *和char[]并不是一回事,char *指向一个常量字符串,内容不变,char[] 是一个字符数组,地址和容量不变,但内容可变,具体看这里
    • string的分割操作:
      std::string 没有提供split方法,但是可以结合str.find(c,index)和str.substring(index,length)方法,while循环,在不返回std::vector的情况下还算方便的实现

    C(++)是不对数组下标是否越界进行检查的

    • 内存算你的,new完没释放炸了也算你的
    • 结构体、类的赋值是按照变量的声明顺序来的,不是按照变量名,所以不同结构体可以直接用类型转换赋值而不报错(即使是运行时),对于目标结构体中不存在的变量,会将源结构体对应的“位置(地址)"的值拷过来,值不一定会变成什么
    • memcpy这种东西太霸气了,由于参数是指针(首地址),无视类型长度,length写多长他就能copy多长,搞坏了一块数据还不一定会闪退
    • 如果发现某个变量的值(特别是类变量)莫名其妙的变了,去看看它声明所在的上一个变量(内存空间)是什么,基本上是对那个变量越界赋值了,然后挤入了下一个变量的空间,就。哦下一个变量如果操作了[-1]也是有可能搞死当前内存区域的

    局部变量一定要初始化

    • 否则就按照编译器的喜好来了,g++下int可能是4248523也可能是1986687962(数组),bool型是0,vs下可能是-858993460,char就更随意了,任意字符都是有可能的?
    • 类变量同理,关键是bool,vs默认是true,g++、Android、ios下是0
    • 函数返回值同上

    据说Android5.0以上sprintf遇到中文会截断,作为代替,使用stringstream<<来连接字符串;
    const char* 转char *:const_cast<char *>(str.c_str())
    但是使用ss的话要小心BYTE(unsigned char)这种类型,它本质还是char,和uint不同,BYTE b=8,使用ss连接得到的结果是x8,如果一定要这样连接,需要把b+0再-0...


    lambda表达式

    cocos scheduleOnce([=](float dt){//sth},1f,"Name"); //其中Name是必须的


    cocos2d-x编Android

    cocos辣鸡 我不管cocos就是辣鸡
    project.android/jni/Android.mk里面的LOCAL_SRC_FILES :=【】,里面除了最后一个main.cpp不要动,其他到win32/*.vcxproj 里所有的ClCompile复制出来,替换成’../../Classes/xxxx.cpp \‘的格式,复制进来
    NDK版本呵呵
    cocos studio编译的话一堆sdkndkant的路径在配置中配置,不需要设置环境变量,命令行需要设置环境变量为几个Root

    cocos的proj.android使用android studio 调试和编译

    直接导入的话可以参考这篇,非常详细
    要调试的话需要manifest文件中<application android:debugable:true> release版本记得去掉
    这样导入因为不是gradle类型的项目不能设置build type为debug和release,要使用gradle的话需要 (cocos compile -p android --android-studio //可能不需要,但每次都是先做了这步的),再导入proj.android,导入时要设置libcocos2dx的路径,在gradle里添加
    signingConfigs {
    release {
    storeFile file("xxxx.keystore") //这堆和ant.propertiy那里面的内容一致
    storePassword "xxxxxxxx"
    keyAlias "xxxxx"
    keyPassword "xxxxxxxx" }
    }
    buildTypes {
    debug { signingConfig signingConfigs.release }
    release { signingConfig signingConfigs.release } }
    以使用签名打包apk

    相关文章

      网友评论

          本文标题:函数指针函数数组指针数组双重指针char*你怕了吗反正我怕

          本文链接:https://www.haomeiwen.com/subject/kdprettx.html