今天看到CoolShell.cn上面一个关于数组指针的例子,拿过来运行下,我的确是有些醉了。。
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
printf("1..%d\n", a[1]);
printf("2..%d\n", *(a+1));
printf("3..%d\n", *(1+a));
printf("4..%d\n", 1[a]); //这个也能行??
//int 3[b]= {1,2,3}; //尝试这么变态的声明数组,编译器报错了,看来这种写法只能在表达式中存在
printf(&"abcdefg..%c\n"[2],"abcdefg\n"[2]); //把这种奇怪的表示方法应用到这里也是可以滴!
printf(&"abcdefg\n"[2]);
printf(&2["abcdefg\n"]);
return 0;
}
看看运行结果是否和你想的一样?
./aa
1..2
2..2
3..2
4..2
cdefg..c
cdefg
cdefg
同时附上我的Makefile供懒人copy&paste&run
cat Makefile
print:aa
./aa
aa: aa.o
gcc -o aa aa.o
aa.o: aa.c
gcc -c aa.c
cat aa.c
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
printf("1..%d\n", a[1]);
printf("2..%d\n", *(a+1));
printf("3..%d\n", *(1+a));
printf("4..%d\n", 1[a]);
//int 3[b]= {1,2,3};
printf(&"abcdefg..%c\n"[2],"abcdefg\n"[2]);
printf(&"abcdefg\n"[2]);
printf(&2["abcdefg\n"]);
return 0;
}