所以,我在玩C指針和指針算術,因爲我對它們不是很滿意。我想出了這個代碼。關於雙指針和三指針/雙維數組
char* a[5] = { "Hi", "My", "Name", "Is" , "Dennis"};
char** aPtr = a; // This is acceptable because 'a' is double pointer
char*** aPtr2 = &aPtr; // This is also acceptable because they are triple pointers
//char ***aPtr2 = &a // This is not acceptable according to gcc 4.8.3, why ?
//This is the rest of the code, the side notes are only for checking
printf("%s\n",a[0]); //Prints Hi
printf("%s\n",a[1]); //Prints My
printf("%s\n",a[2]); //Prints Name
printf("%s\n",a[3]); //Prints Is
printf("%s\n",a[4]); //Prints Dennis
printf("%s\n",*(a+0)); //Prints Hi
printf("%s\n",*(a+1)); //Prints My
printf("%s\n",*(a+2)); //Prints Name
printf("%s\n",*(a+3)); //Prints Is
printf("%s\n",*(a+4)); //Prints Dennis
printf("%s\n",*(*(aPtr2) +0)); //Prints Hi
printf("%s\n",*(*(aPtr2) +1)); //Prints My // ap = a, *ap = *a, *(ap)+1 = *a+1 ?
printf("%s\n",*(*(aPtr2) +2)); //Prints Name
printf("%s\n",*(*(aPtr2) +3)); //Prints Is
printf("%s\n",*(*(aPtr2) +4)); //Prints Dennis
char*** aPtr2 = &a
根據GCC 4.8.3,爲什麼是不能接受的?
對不起忘了補充編譯器警告:
警告:初始化從兼容的指針類型[默認啓用]
它也許還不清楚,我想說,讓我不得不添加此鏈接:
- 這是可以工作的代碼:http://ideone.com/4ePj4h。 (第7行註釋掉)
- 這是不起作用的代碼:http://ideone.com/KMG7OS。 (第6行註釋掉)
注意註釋掉的行。
「不可接受」,你是什麼意思?請包含警告或錯誤消息。 –
你確定它打破了嗎? http://ideone.com/KM516t(請注意,你缺少一個分號,並重新使用'aPtr2'的名字) – mtijanic
我發佈的'ideone'鏈接爲gcc-4.9.2編譯得很好。你使用什麼編譯器標誌? – mtijanic