函數指針函數數組指針數組雙重指針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<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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容