在以下代码中:
#include<stdio.h>
int main(int argc,char *argv[]){
int index;
for(index = 0; index < argc; index++) {
printf("The %d is %s\n",index,argv[index]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从声明中char *argv[],cdecl说它意味着
declare argv as array of pointer to char,所以我认为代码应该这样写:
printf("The %d is %s\n",index,*argv[index]);
如下代码:
void give_me_ptr(int *ptr){
printf("the value of ptr is %p\n", ptr);
printf("the value of ptr is %d\n", *ptr);
}
int main(void){
int a = 10,index;
give_me_ptr(&a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
事实证明
the value of ptr is 0x7fff76010b48
the value of ptr is 10
Run Code Online (Sandbox Code Playgroud)
对我而言,这意味着我应该在指针变量之前添加*.
AnT*_*AnT 10
在printf函数中,格式说明符%s需要指向字符串的第一个字符的指针作为相应的参数.这就是你传递argv[index]给它的原因.argv[index]是一个指针.
如果你通过了*argv[index],你只会传递argv[index]字符串的第一个字符,这是不正确的.%s需要指向第一个字符的指针,而不是字符本身.