在做的时候我得到"左值作为增量操作数" *++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)
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是指针).