// strings is a 2D array (each string is 11 bytes long)
char strings[][11] = {"", "2222244444", "3333366666"};
printf("String 3 Character 2 is %c\n", strings[2][1]);
如何使用指針算術而不是strings[2][1]
來編寫此打印語句?二維數組的C指針算術
// strings is a 2D array (each string is 11 bytes long)
char strings[][11] = {"", "2222244444", "3333366666"};
printf("String 3 Character 2 is %c\n", strings[2][1]);
如何使用指針算術而不是strings[2][1]
來編寫此打印語句?二維數組的C指針算術
在C,a[b]
相同*(a+b)
(而且由於加法是可交換的,這意味着它也相當於b[a]
。人們寫了國際C語言混亂代碼大賽經常依靠這一點,使用像x["string"];
,不用說,最好避免這種事情,除非你故意邪惡,雖然...
編輯:對於任何人誰確定他們的理解要達到鼻菸應該隨時分析以下,並正確預測其運行前的輸出:
#include <stdio.h>
char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };
char **cp[] = { c+3, c+2, c+1, c };
char ***cpp = cp;
main()
{
printf("%s", **++cpp);
printf("%s ", *--*++cpp+3);
printf("%s", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}
如果記憶服務,那個特定代碼的信用(責備?)發給Thad Smith。
哇,這是一個很棒的小動作! –
我對此有何看法?
char strings[][11] = { "", "2222244444", "3333366666" };
printf("String 3 Character 2 is %c\n", *(*(strings + 2) + 1));
相當差。在這個例子中它是'strings [2] [1]'。你正在打印一個不存在的'strings [3] [1]'。另外,這裏不需要'&'運算符 - 它是無害的,但是完全是多餘的。 –
所以一個錯誤是一個壞的? – ChaosPandion
*(*(strings+2)+1)
嗯...功課? – ine
聽起來像是對我功課。你有什麼麻煩理解? –
索引運算符是變相指針運算。 – GManNickG