gpt4 book ai didi

c++ - 递增数组变量时需要不一致的左值错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:23 25 4
gpt4 key购买 nike

我在执行 *++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;
}

最佳答案

a是一个常量(数组名)你不能通过做 ++a 来改变它的值, 等于 a = a + 1 .
你可能想做 *a = *a + 1 (增加 0 索引值),为此尝试 *a++反而。注意我已经改变了++从前缀到后缀。

备注:char* argv[]被定义为函数参数和argvchar** 的指针变量输入(char*[])。
而在您的代码中 int* a[]不是函数参数。这里a是一个 int 类型的数组 ( int* )(数组名是常量)。记住函数参数中的声明和普通声明是不同的。

此外,通过使用 ++argva你刚刚发现了一个不同点,如果你使用 sizeof 你可以观察到一个更有趣的不同点运算符(operator)打印那里的尺寸。例如检查这个工作代码 Codepade

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

输出是:

a: 8, argv: 4

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

关于c++ - 递增数组变量时需要不一致的左值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17540026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com