C 数组和指针链
正如c语言书中所写的,数组名是指向第一个元素的指针,所以在names数组中,names指向第一个元素,也是字符串文字的指针,然后*names将打印第一个元素,但在下一行代码中,p指向a,q指向q,就像names arr一样,但是当u打印*q时,你没有得到一个值,它是3,为什么C 数组和指针链,c,pointers,arr,C,Pointers,Arr,正如c语言书中所写的,数组名是指向第一个元素的指针,所以在names数组中,names指向第一个元素,也是字符串文字的指针,然后*names将打印第一个元素,但在下一行代码中,p指向a,q指向q,就像names arr一样,但是当u打印*q时,你没有得到一个值,它是3,为什么 #include <stdio.h> int main(void){ char *names[]={"jack","philip"}; printf("%s\n",*names); in
#include <stdio.h>
int main(void){
char *names[]={"jack","philip"};
printf("%s\n",*names);
int a=3;
int *p=&a;
int *q=&p;
printf("%i\n",*q);
return 0;
}
#包括
内部主(空){
字符*名称[]={“杰克”,“菲利普”};
printf(“%s\n”,*名称);
INTA=3;
int*p=&a;
int*q=&p;
printf(“%i\n”,*q);
返回0;
}
区别在于printf()
。%s
需要一个指向以null结尾的字符串的指针,而%i
需要一个指向数字本身的指针,而不是一个指向数字的指针,数字就是您所拥有的。a
是int
,因此p
是指向int
(int*/code>)的指针,因此,q
是指向int
(int**
)的指针。要打印int
,请将int
馈送到printf
:
printf("This is an int: %i\n", 42);
因此,对于%i
函数printf
需要一个int
类型的参数,但是您将*q
传递给它,它的类型是int*
。您将一个指针传递到printf
,它不需要数字指针,只需要字符串指针。这就是工作代码的外观
#include <stdio.h>
int main(void) {
char *names[]={"jack","philip"};
printf("%s\n",*names);
int a=3;
int *p=&a;
int **q=&p;
printf("%i\n",**q);
return 0;
}
就像做
printf("%c", *names);
这显然会给出奇怪的输出对不起,在问题的第三行,第二个q不是q,miss typedit应该是int**q,&p是一个int指针的地址,为了让你的最后一次打印变成print 3,如果你喜欢@ryanfizpatrick sugested,q
相当于&p
,*q
相当于&a
**q
相当于存储3
的a
**q不工作,我已经tried@VahidEfq必须是int类型**请参阅我的答案以了解代码的工作版本
printf("%c", *names);