下列程序的输出结果为:
#include <stdio.h> #include <string.h> void main() { char* a[] = {"hello", "the", "world"}; char** pa = a; pa++; printf("%s\n", *pa); }
指针有两个属性:类型和值。
指针自增,就是指针增加一个指向类型的长度。
例如指向char的指针ptr自增,那ptr的值就会增加char所占的内存大小,即1字节。
那这里指向char*类型的指针pa自增,pa的值就会增加char*类型所占的大小,即一个指针所占的大小4字节(32位机)。
//声明了一个指针数组a。数组中的元素全部都是指向char类型的指针(char*)。 char* a[ ] = { "hello", "the", "world"}; //声明了一个二级指针pa。pa是指向char*类型的指针! //即pa是指向 char*(指向char类型的指针) 类型的指针,pa的值是指针数组a的首地址。 char** pa = a; //pa++,即pa的值增加指针类型所占大小,即4字节。 //原来pa的值是数组指针a的首元素地址,现在pa的值是指针数组第二个元素的地址。 pa++; //对pa解引用得到的是一个数组指针,就是指针数组a第二个元素,即"the"的地址。 cout<<*pa<<endl