一个C语言中的题目

来源:百度知道 编辑:UC知道 时间:2024/06/03 23:05:55
#include<stdio.h>
void main()
{ int *a[10],b,c;
a[0]=&b;
*a[0]=5;
c=(*a[0])++;
print("%d%d\n",b,c);
}
求出b和c的结果

结果是6和5
a[0]=&b; 将b的地址赋给a[0];
*a[0]=5; 将5赋给a[0][0],*a[0]相当于
*(a[0]+0)相当于a[0][0];
c=(*a[0])++; 这句是先把a[0][0]的值赋给C,然后再自加1,因为所有的操作是相对于地址,所以b的值被修改为6。

问题在哪?

#include <stdio.h>

void main()
{
int *a[10],b,c;
a[0]=&b;
*a[0]=5;
c=(*a[0])++;
printf("%d %d\n",b,c);
}

输出是:6 5

可见b=6,c=5啊

b=6,c=5
int *a[10]为数组指针,其元素为指针,a[0]=&b使把b的地址赋给a[0],即a[0]指向b。*a[0]=5把5 赋给a[0]所指向的内存单元即b,c=(*a[0])++;先计算()中的即c=5++;所以c=5,后*a[0]再加一为6;
又因为a[0]的指向为b,所以b=6.