我认为这种类型的问题已经被问到了抱歉,但有人可以告诉我为什么这是错的。
int a[]={10,20,30,45,50};
int j;
for(j=0;j<=4;j++)
{
cout<<(*a);
a++;
}
好吧,如果上面代码中的指针a不能递增,那么下面的代码就可以了,是不是因为指针首先被赋值给一个变量然后递增了。
int var[] = {10, 100, 200};
int i, *ptr;
//let us have array address in pointer
ptr = var;
for ( i = 0; i < MAX; i++)
{
printf("Value of var[%d] = %d\n", i, *ptr );
// move to the next location
ptr++;
}
答案 0 :(得分:1)
* a指的是[]的第一个元素是10.你将在++处得到编译器错误。这是因为你不能增加a的值。 * a是指向[]的第一个元素的常量指针,其地址不能更改。
应该是:
int a[]={10,20,30,45,50};
int j;
for(j=0;j<=4;j++)
{
cout<<*(a+j);
}
答案 1 :(得分:1)
它不能编译,因为数组不是指针:
使用int arr[] = {...}
:
arr
和&arr
的值必须相同
arr
指向有效的内存地址,但不能设置为指向另一个内存地址
使用int* ptr = ...
:
ptr
和&ptr
的值不一定相同(事实上,它们大多不同)
ptr
可以设置为指向有效和无效的内存地址,可以多次使用