C字串、字元數組、指標數組、指向數組的指標 徹底研究

來源:互聯網
上載者:User
數組名代表的地址是 數組第一個元素的地址,而不是 數組的首地址。數組的地址和數組第一個元素的地址雖然在數值上相同,但是在類型上不同,所以不能進行相等比較。記住:C 語言中所說的地址是指標類型,除了大小概念外,還有類型上的約束。

忽然發現這個問題我還不知道:
int
main()
{
     char ss[20]=""
    printf("0x%x\n",ss);
    printf("0x%x\n",&ss);
}

列印出來的結果是ss=&ss,而如果換成 char *ss,則不同;將數組ss移到main外定義,並賦初值,結果相同;如果定義函數ss(),列印結果依然相同,誰能解釋一下?

第二個問題:
void fun(char code[],int size)
{
    char temcode[6000]="";
    memset(temcode,0,6000);
    memcpy(temcode,code,size);
   //關鍵的這裡
   ((void (*)(void))temcode )();//調用函數
    //請問這裡是上面那樣寫還是((void (*)(void)) &temcode )(); 為什嗎?
   
}
int main()
{
     char code[]="\x12\x34.......";\\這裡的代碼是一段函數的16進位碼,函數類型為void(*)(void)
   fun(code,sizeof(code));
}

char ss[128];

這樣定義的數組名字ss是一個常數(代表一個地址)。
對常數不能再取地址。

但編譯器設計者可能考慮有人不是很明白這個,會對ARRAY NAME常數取地址,那就給出還是那個常數。

ss是數群組類型,&ss是取數組的地址,返回的當然是數組的頭指標;如果ss定義為char *; &ss的結果是指標的地址,所以會不一樣。是資料類型的問題。數組也是一中資料類型。函數指標也是一種類型,函數名就是函數的指標(可以這樣認為), &函數名,返回的就是函數地址,和函數名的結果一樣。分清楚不同的資料類型就會搞明白
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.