【发布时间】:2021-07-06 12:58:43
【问题描述】:
检查a和p[1]的值和地址:
#include<stdio.h>
main()
{
int a=10,*p,c=20,n,i;
printf("---&a is %p\n",&a);
printf("---&p is %p\n",&p);
printf("---&c is %p\n",&c);
printf("---a is %d\n",a);
printf("---p is %d\n",p);
printf("---c is %d\n",c);
printf("Enter size: ");
scanf("%d",&n);
printf("Enter ele: ");
for(i=0;i<n;i++)
{
scanf("%d",&p[i]);
}
printf("---&p[1] is &p\n",&p[1]);
printf("---&p+1 is &p\n",&p+1);
printf("---a is &d\n",a);
printf("---p[1] is &d\n",&p[1]);
printf("---p+1 is &p\n",&p+1);
printf("---a is &p\n",a);
printf("---&a is &p\n",&a);
printf("---c4 is &p\n",c);
printf("---&c is &p\n",&c);
}
这里a和p[1]的值不同,虽然地址相同,为什么?
【问题讨论】:
-
您似乎没有为
p赋值。 -
p未初始化。所以&p[1]是一个不确定的值。总之,代码无效。 -
代码无效!!首先,我打印了垃圾值,然后我使用 scanf 来分配值!!
-
p未初始化,因此它不指向任何对象。这使得&p[i]的使用无效。如果p的值是一个足够大的内存区域的地址,可以存储10 个int值,那就没问题了。但它没有赋值,更不用说对象的地址了。 -
这与声明未初始化的
int然后尝试在算术表达式中使用它没有什么不同。 (int base; for (i = 0; i < 10; ++i) printf("%d\n", base + i);)。
标签: c pointers memory-address