// 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