帮忙一道C语言题!

[复制链接]
查看11 | 回复4 | 2008-8-5 13:05:24 | 显示全部楼层 |阅读模式
以下程序的运行结果是
A) 运行后报错 B) 66
C) 612
D) 55

#include "stdio.h"

main()

{

inta[ ]={1,2,3,4,5,6,7,8,9,10,11,12,};

int*p=a+5, *q=NULL;

* q=*(p+5);

printf("%d%d \n",*p,*q);

}
答案选a

回复

使用道具 举报

千问 | 2008-8-5 13:05:24 | 显示全部楼层
明显选A ,对指针变量的赋值只能是地址而不能是具体的值,
其中语句 *q=*(p+5)表示的意思是讲p指针变量的地址值加5后所指向的空间的值赋给q空间,而q是指针变量,只能存放地址值,
故这个语句是错误的, 应该改成
q=p+5; 但答案为6,11。它相当为p=a+10。
相当于是在p所指向a[5]的情况下在以a[5]编号为0,向后在推5个数据,变成a[10],即答案也是 6, 11才对
只要是指针的题目需要的是明确的将语句用语句念出来即可解决!
回复

使用道具 举报

千问 | 2008-8-5 13:05:24 | 显示全部楼层
选A,其中语句 *q=*(p+5);有错,q是一个指针,对它赋值只能是一个地址,而不能是具体的数(右值)。改为 q=p+5; 但答案为6,11。它相当为p=a+10。其实类似这样的题,用排除法即可,很明显如果运行正确的话应为 6,11。或者自己在电脑上运行一下。
回复

使用道具 举报

千问 | 2008-8-5 13:05:24 | 显示全部楼层
选 A* q=*(p+5); 这句话有问题 如果是 q=p+5; 这样就对了不过就算是q=p+5; 也不能选C结果是 611
回复

使用道具 举报

千问 | 2008-8-5 13:05:24 | 显示全部楼层
你的输入法有问题 切换成打英文的状态再打 ,和;就论答案选c
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行