對沒錯這篇是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