对没错这篇是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[] 是一个字符数组,地址和容量不变,但内容可变,具体看这里
- char * 是c语言中的特殊结构,可以指向一个字符串(c_str),也就是一个字符数组
- 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