码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-09 15:22:40      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

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

测试程序这样:

#include <stdio.h>

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到底有没有被改变。

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

标签:

原文地址:http://www.cnblogs.com/Junction/p/4715053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!