程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言二級指針的一些理解,c語言指針

C語言二級指針的一些理解,c語言指針

編輯:關於C語言

C語言二級指針的一些理解,c語言指針


最近在重新學習《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到底有沒有被改變。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved