天天看点

c语言二级指针例子,C语言二级指针的一些了解

C语言二级指针的一些理解

最近在重新学习《C和指针》,指针那一章里面的一个例子——在一串字符串中查找特定的字符:版本2中有一句看不太明白,*(*string)++,于是写程序测试、琢磨了一下。

测试程序这样:

#include

int main()

{

char str1[] = "ABCD";

char str2[] = "EFGH";

char *pStrArray[2] = { str1, str2 };

char **pStr1 = pStrArray;

char **pStr2 = pStrArray;

(*pStr1)++;

*pStr2++;

printf("%c ", **pStr1);

printf("%c ", **pStr2);

getchar();

}

VS编译运行,最后的打印效果:B E

第二个好理解,第一个结果却一下子想不明白,当时的思维误区是这样的:

执行(*pStr1)++之后只有*pStr1改变了,pStr1本身并没有改变,猜想**pStr1的输出应该是A才对。

现在想通了,pStr1确实没有被改变,pStr1里面存的是pStrArray[0]的地址,而pStrArray[0]存的是str1[0]的地址,当(*pStr1)++被执行的时候,即等价于pStrArray[0]++,此时pStrArray[0]指向str1[1],所以**pStr1的输出为B。

进入思维误区的原因是*Str1等价于&pStrArray[0]并不明显,以为只是个临时变量,没有被保存就被丢弃了,还有就是怀疑执行后pStr1到底有没有被改变。