Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数组和指针链_C_Pointers_Arr - Fatal编程技术网

C 数组和指针链

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

正如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);
    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);