#include <stdio.h> void f(char **p) { *p += 2; } void main() { char *a[] = {"123", "abc", "456"}, **p; p = a; f(p); printf("%s", *p); }
char **p表示二级指针,p保存一级指针char *的地址 所以*p的值就是char *的地址,所以f(p)的功能就是让保存的char *的地址加2。 char *a[]是一个指针数组,它包含三个char *指针的元素,分别指向字符串常量"123"、"abc"、"456"的首地址,因为在内存中他们相邻,又123、abc都是3个字节,所以三个地址值都差3,可以通过printf("%p %p %p\n", a[0], a[1], a[2]);验证 而a等价于&a[0],所以p的值为&a[0],*p即等价于a[0],即指向"123"的首地址"1",*p+2即指向3,所以答案为3