所以我玩指針來理解不同的用例,我沒有如此經驗,無法繞過我的頭一些想法。我會標記出我有問題的地方。 請幫我理解指針。第6行玩指針,昏迷和char *字符串
:
爲什麼我不能指代一個字符串數組,因爲這是它是如何存儲在內存中,我認爲。 如何訪問字符串的單個字符?
上線7-8:
爲什麼會出現的8個字節&str
和&str + 1
之間的差時int
數據類型需要4個字節
上線9,10和12:
爲什麼是否使用*str
來表示以int
作爲輸入的字符串? 以及爲什麼它會將單個字節char
轉換爲int
而不是投射4個字節?
char *str = "Ninechars";
printf("Start\n");
printf("%s\n", str);
printf("%p\n", str); // address of first char of str
printf("%p\n", str+1); // address of second char of str
// printf("%s\n", str[1]); // [segfault] warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [TODO]
printf("%p\n", &str); // address to head of the string? NO, address of the pointer var str
printf("%p\n", &str+1); // [TODO], difference of 8bytes b/w this and previous address value? [WHY]?
printf("%d\n", *str); // what integer is this? -> whatever can be made from 'N'=78
printf("%d\n", *(str+1)); // 'i'=105, but why is it taking single byte ints [TODO]
printf("%ld\n", sizeof(1)); // 4 bytes, as expected
// printf("%s\n", *str); // [?]Wrong, [HOW][WHY], format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’[TODO]
printf("End\n");
Output: Start Ninechars 0x40088f 0x400890 0x7fff95a594e8 0x7fff95a594f0 78 105 4 End
完整的代碼文件是在這裏:http://ideone.com/ryag80
第6行需要一個'const char *',你給它一個'char'。同樣與第12行。 – WhozCraig 2014-11-23 07:03:20
當您爲轉換說明符給出無效參數時,它是未定義的行爲。雖然這可能不是你想聽到的。 – 2014-11-23 07:04:46
[WhozCraig](http://stackoverflow.com/users/1322972/whozcraig)謝謝!清除了一些東西,但它爲什麼會恢復爲'int'?這是默認的機制嗎? – abhik 2014-11-23 07:14:20