char **p;

-
char **p;
等价于typedef char * T; T *p;
-
char **p;
中第一个星号是 类型char *
一部分 -
char **p;
中第二个星号声明p
是指针类型,p
的类型是T *
运行结果

-
p
是指针变量,不管它是指向什么东西的指针,指针变量存着的只是地址 - 图中的机器,地址用八个字节来存,那么
sizeof
的输出就是8
- 这里的
p++
本质是加了八个字节
完整源码
#include <stdio.h>
typedef char * T;
int main(int argc, char * argv[]) {
int i;
for(i = 0; i < argc; i++)
printf("%s\n", argv[i]);
char **p;
for(p = &argv[0]; *p != NULL; p++)
printf("%s\n", *p);
printf("sizeof(p)=%ld\n", sizeof(p));
T * pt;
for(pt = &argv[0]; *pt != NULL; pt++)
printf("%s\n", *pt);
printf("sizeof(p)=%ld\n", sizeof(pt));
return 0;
}
参考资料
《C语言程序设计:现代方法(第2版)》第 13 章 字符串
网友评论