程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言入門知識 >> 一道C語言的指針筆試題

一道C語言的指針筆試題

編輯:C語言入門知識

題目如下:

#include
int main()
{
	char *a="Aliyun";
	char **b=&a;
	*b="programming test";
	char *c=++a;
	a="talents.";
	printf("%c\n",*++c);
	return 0;
}

問輸出是什麼。

我們一步步分析。

首先是第一句: char *a="Aliyun";,這句程序就是聲明了一個指針變量a,a指向常量字符串"Aliyun"。也就是說,變量a裡面存放的所地址,也就是存放字符串"Aliyun"的地址。

第二句:char **b=&a;這句就是聲明了一個指針的指針,其實實際上b還是一個指針,只不過b指向的變量是一個指針。也就是說,b裡存放著a的地址,注意是a的地址,而不是a的值。這裡我們要明白一個概念,指針型的變量存放的永遠都是地址,當然不包括NULL。

第三句:*b="programming test";這裡的*被稱作解引用符,簡單點來說,就是取指針b指向的內容。這裡*b=a;所以*b實際上是a。

也就是說這句話等於a="programming test";意思就是指針a指向了新的字符串"programming test”。注意一下,當一個指針直接=字符串的時候,是將該字符串的地址賦給這個指針。所以如果int *a=12;這句話就出錯了,這個意思就是直接把12賦給指針a,因為類型不同,所以會提示出錯,當然,還是可以把12強制轉換成為指針類型的值,然後再賦給變量。

第三句:char *c=++a;這裡的a的值實際上是一個地址,指向的是字符串"programming test”的首個字符,也就是"p",++a是先自增的。所以c實際上就指向了“r“.

第四句是干擾,c和a沒關系。

第五句:*++c。也就是返回一個自增後的地址,然後再取一個字符輸出。原來指向的所"r",自增後就是"o"。

所以輸出的是字符"o".


在ubuntu下用gcc驗證成功。

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