C中指针问题!!

来源:百度知道 编辑:UC知道 时间:2024/05/14 07:57:08
#include <stdio.h>
void main()
{
int a[100],i,j,k,m,n;
printf("Enter a n\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a++);
for(i=n-1;i>=0;i--)
{
k=a[n-1];
for(j=n-2;j>=0;j++)
a[j+1]=a[j];
a[0]=k;
for(m=0;m<n;m++)
printf("%3d",a[m]);
printf("\n");
}
}

编译后scanf("%d",&a++)这一行出现; Lvaule required in function main
把&a++改成&(a+i)后出现 must take address of memory location in function main
为什么呢??
改成a+i后执行输入7,然后输入7个数后出现
16位 MS-DOS子系统
TC.EXE
NTVDM CPU 遇到无效指令
CS:6770 IP: 002a op: ff e8 34 01 c4选择“关闭”终止应用程序
??
为什么会这样呢?

程序中int a[100],定义了一个一维数组,a表示这个数组的首地址!
scanf("%d",&a++); a已经是地址了,所以不需要再加取地址符&.去掉&.另外,a既然被定义为数组首地址,所以a是指针常量,不能再加1.所以建议你再定义一个指针int *p;
下面这段:
for(i=0;i<n;i++)
scanf("%d",&a++);
改为:
for(i=0,p=a;i<n;i++,p++)
scanf("%d",p);

另外,程序中:
for(j=n-2;j>=0;j++) //应该是j--!!!!
a[j+1]=a[j];

scanf("%d",&a++); a已经是地址了,所以不需要再加取地址符&.去掉&.

a代表数组第一个元素的地址

a是数组名,相当于一个常指针,所以不能“a++”这样用。
你可以定义一个int *p;
然后 p= a;
此时就可以“p++”了