2014-09-06 142 views
-4

我认为这种类型的问题已经被问到对不起,但任何人都可以告诉我为什么这是错的。我不明白为什么我的代码不工作?

int a[]={10,20,30,45,50}; 
    int j; 
    for(j=0;j<=4;j++) 
    { 
      cout<<(*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

你发现了什么问题。 ..? – 2014-09-06 06:45:53

+0

错误是“左值需要作为增量操作数”? – CodeHacker 2014-09-06 06:51:45

+0

你想要做什么..? – 2014-09-06 06:53:17

回答

1

* a指的是[]的第一个元素,它是10.您将在++中得到编译器错误。这是因为你不能增加a的值。 * a是常数指针指向的第一个元件的[],并将其地址不能被改变..

它应该是:

int a[]={10,20,30,45,50}; 
int j; 
for(j=0;j<=4;j++) 
{ 
    cout<<*(a+j); 
} 
+0

但为什么一个错误只是递增和解引用它呢? – CodeHacker 2014-09-06 06:58:52

+0

a是一个常数指针...它的地址无法更改.. – lakesh 2014-09-06 07:08:56

+0

如果我的回答很有用,请将它标记为正确.. – lakesh 2014-09-06 18:49:11

1

它不编译,因为阵列不是指针:


随着int arr[] = {...}

  • arr&arr的值不必相同

  • arr指向一个有效的存储器地址,但不能被设置为指向另一存储器地址


随着int* ptr = ...

  • ptr和的值不必相同(事实上,他们大多是不同的)

  • ptr可以设置为指向有效和无效的内存地址,如多次,你会

相关问题