[C语言]char **p; 等价于 typedef char * T; T *p;

char **p;

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

运行结果

char **p;
  • p是指针变量,不管它是指向什么东西的指针,指针变量存着的只是地址
  • 图中的机器,地址用八个字节来存,那么sizeof的输出就是8
  • 这里的p++ 本质是 加了八个字节

完整源码

#include 

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 章 字符串

你可能感兴趣的:([C语言]char **p; 等价于 typedef char * T; T *p;)