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

对没错这篇是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(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文件中 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*你怕了吗反正我怕)