我不明白为什么我的代码不起作用?

时间:2014-09-06 06:42:47

标签: c++

我认为这种类型的问题已经被问到了抱歉,但有人可以告诉我为什么这是错的。

    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++;
  }

2 个答案:

答案 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可以设置为指向有效和无效的内存地址,可以多次使用