C语言指针选择题 求解析

谢谢
2025-03-06 22:26:03
推荐回答(1个)
回答1:

int a[];    数组的数组名本质上是个地址常量。示例程序如下:

#include
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10};
int *p=a;                //指针变量p指向数组a
int i;
printf("%x\n\n",a); //以16进制输出数组名a的地址值
for(i=0;i<10;i++)
printf("%x\n",&a[i]); //以16进制输出数组元素的地址值
putchar('\n');
for(i=0;i<10;i++)
printf("%-4d",a[i]);    //输出数组的元素
return 0;
}

运行上面程序,你会发现输出的a的值与数组首元素的地址值是相同的,即a == &a[0],由于数组名是个地址常量,它是不能进行自加或自减运算的,也不能做算术运算。引用数组元素的方式:

(1)a[i];

(2)p[i];        //前提是p=a;即指针变量p已经指向数组a了

(3)*p或*(p+i)或*(p++)或*(p--)    //变量是可以进行自加或自减运算的

指针变量存放的是地址值,即指针就是地址。

数组元素地址的表示方法:

(1)&a[i];    //&为取地址符

(2)&p[i];    //前提是p=a;即指针变量p已经指向数组a了

(3)p++或p--;    //其中指针变量p表示当前指向的数组元素

(4)p+i或p-i