递增数组变量时,左值不一致所需的错误

Bha*_*kar 4 c c++ pointers

在做的时候我得到"左值作为增量操作数" *++a.我哪里错了?我认为这相当于*(a+1).这种行为很奇怪,因为*++argv工作正常.请帮忙.

#include <stdio.h>

int main(int argc, char *argv[])
{    
  printf("Arg is:  = %s\n", *++argv);

  int a1[] = {1,2,3,4,5,6};    
  int a2[] = {7,8,9,10,11,12};
  int *a[2];

  a[0] = a1;
  a[1] = a2;

  printf("ptr  = %d\n", *++a);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Gri*_*han 5

a是一个常量(数组名称),你不能通过这样做来改变它的值++a,即等于a = a + 1.对于此尝试,
您可能想要*a = *a + 1(增加0索引值)*a++.注意我++已从前缀更改为postfix.

注意:char* argv[]被定义为函数参数和argv是指针变量char**类型(char*[]).
而在您的代码int* a[]中不是函数参数.这a是一个int type(int*)数组(数组名称是常量).记住函数参数和正常声明中的声明是不同的.

此外,通过使用++with argv并且a您发现了一个差异,如果您使用sizeof运算符打印那么大小,您可以观察到一个更有趣的差异.例如,检查此工作代码Codepade

int main(int argc, char* argv[]){
    int* a[2];
    printf(" a: %u, argv: %u", sizeof(a), sizeof(argv));
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

a: 8, argv: 4
Run Code Online (Sandbox Code Playgroud)

系统中的地址大小为四个字节.输出8是数组的大小a由int地址类型的两个元素组成(因为a是数组),而4大小是argv(因为argv是指针).