设为首页 加入收藏

TOP

一道C语言的指针笔试题
2014-11-23 19:08:56 来源: 作者: 【 】 浏览:14
Tags:一道 语言 指针 试题

题目如下:

#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验证成功。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇程序猿之---C语言细节17(求time_.. 下一篇C语言实现strcmp()和strcpy()函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: