北京故宫经历的地震:这个C语言选择题

来源:百度文库 编辑:高考问答 时间:2024/04/28 20:54:01
有以下程序
#include <stdio.h>
main()
{ int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;
*q=*(p+5);
printf("%d %d\n",*p,*q);
}

A.运行后报错 B 6 6 C. 6 11 D.5 10

答案是A,请问哪儿错了呢?如果要修改怎么改》?改过之后答案又是哪个》

*q=*(p+5);
这个出错

改成q=p+5;
说明将p+5所指向的地址给q

该过之后答案是C

改过之后应该是B
不会改

因为q的地址为空,无法赋值。感觉应该q=p+5; 或者q=&*(p+5)

很长时间不用,记不太清了,但感觉是指针定义有些问题,按照题目的想法答案应该是C,首先要搞清楚,P存的是地址,而*P存的是数值,*P存的是数组偏移5后的数值(从0开始)为6,P+5是从P的位置再偏移5(从0开始),就到了11的位置,*(P+5)取的是这个位置的值,为11!应该是这样吧,希望答案是正确的!!!

#include <stdio.h>
void main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, }, *p = a + 5, *q = NULL;
q = p + 5;
printf("%d, %d\n", *p, *q);
}
答案c。
*p = a + 5; //p指向a[5]的地址
q = p + 5; //q指向a[10]的地址