#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
行为类似a
side printd()
:
#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;
`}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句