2009-12-09 204 views
0
// 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指針算術

+0

嗯...功課? – ine

+0

聽起來像是對我功課。你有什麼麻煩理解? –

+15

索引運算符是變相指針運算。 – GManNickG

回答

13

在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。

+1

哇,這是一個很棒的小動作! –

0

我對此有何看法?

char strings[][11] = { "", "2222244444", "3333366666" }; 
printf("String 3 Character 2 is %c\n", *(*(strings + 2) + 1)); 
+0

相當差。在這個例子中它是'strings [2] [1]'。你正在打印一個不存在的'strings [3] [1]'。另外,這裏不需要'&'運算符 - 它是無害的,但是完全是多餘的。 –

+1

所以一個錯誤是一個壞的? – ChaosPandion