gpt4 book ai didi

c - 为什么在下面的函数中递增数组 "a"不是错误?

转载 作者:太空狗 更新时间:2023-10-29 17:21:16 24 4
gpt4 key购买 nike

#include<stdio.h>
void printd(char []);
int main(void){
char a[100];
a[0]='a';a[1]='b';a[2]='c';a[4]='d';
printd(a);
return 0;
}
void printd(char a[]){
a++;
printf("%c",*a);
a++;
printf("%c",*a);
}

说明:我原以为它会导致左值错误。但它没有任何错误并给出 bc 作为输出。为什么这个递增数组“a”不是错误?

最佳答案

如果将数组传递给函数,它衰减为指向数组第一个元素的指针。

由于 printd() 中的这一点,指针 a 可以递增和递减,以指向数组 a 的不同元素,如在 main() 中定义。

请注意,当为任何类型T 声明/定义函数的参数列表时,表达式T[] 等同于T*

在问题的具体情况下

void printd(char a[]);

相同
void printd(char * a);

下面的代码显示了与 OP 代码相同的行为,pa 的行为类似于 printd() 中的 a:

#include <stdio.h>

int main(void)
{
char a[100];
a[0]='a';a[1]='b';a[2]='c';a[4]='d';

{
char * pa = a;

pa++;
printf("%c", *pa);
pa++;
printf("%c", *pa);
}

return 0;
`}

关于c - 为什么在下面的函数中递增数组 "a"不是错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31488476/

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