2009-12-09 144 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