#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