我是指针的初学者。完成整数数组和指针后,我转移到字符数组和指针。我期待相同的结果,但它很奇怪。
int main() {
char chararray[20]="Char Array";
void printarray(char *);
void printarraydirect(char * );
printf("Passing chararray to funtion printarray\n");
printarray(chararray);
printf("Printing directly as c in printarraydirect function");
printarraydirect(chararray);
return 0;
}
void printarray(char *c){
int i=0;
//while(c[i]!= ' ')-----------------------> checks for empty space
while(c[i]!='\0')
{
printf("%c",c[i]);
i++;
}
printf("\n");
}
void printarraydirect(char * c){
printf("Printing c-------------->");
printf("%s\n",c);
int i=0;
printf("Printing c[i]-------------->\n");
// shows error here , if so why didnt it show me error in printarray function. and why didnt it print the whole array when printed c in printarray function..
printf("%s\n" c[i]);
}
答案 0 :(得分:2)
首先,您错过了ID
-----------
1
行上的逗号。其次,printf("%s\n" c[i]);
是单个c[i]
(数组的元素类型),因此char
格式不正确 - 应该%s
来打印单个字符。或者,如果您希望从该点开始打印整个字符串,则需要传递该元素的地址(%c
),但在这种情况下,与&c[i]
相同,因为c
}是零。
答案 1 :(得分:0)
基本上%s
格式说明符需要打印到输出流的地址,并打印直到找到NULL字符(\0
)。这里当你简单地给出c
时,数组的基地址作为参数传递。但是当你给c[i]
时,它是位于该位置的值(基地址+索引),即addressOf(c)+ valueOf(i)。