Sub*_*ksh 6 c arrays pointers function
#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);
}
Run Code Online (Sandbox Code Playgroud)
说明:我原以为会导致左值错误.但它正在处理任何错误并将bc作为输出.为什么这个递增数组"a"不是错误?
如果将数组传递给函数,它将衰减为指向数组第一个元素的指针.
由于这种内部printd()指针a可以递增和递减,以指向所述阵列的不同元件a中定义main().
请注意,在为任何类型声明/定义函数的参数列表时,T表达式T[]是等效的T*.
问题的具体情况
void printd(char a[]);
Run Code Online (Sandbox Code Playgroud)
是相同的
void printd(char * a);
Run Code Online (Sandbox Code Playgroud)
下面的代码显示了相当的行为作为OP的代码,并pa表现得就像a在侧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;
`}
Run Code Online (Sandbox Code Playgroud)