数组和指针链
array and pointer chain
正如c书中所写,数组名是指向第一个元素的指针,所以在names数组中,names指向第一个元素,它也是一个指向字符串文字的指针,那么*names将打印第一个元素,但是在下一行代码中,p 指向 a,q 指向 q,就像名字 arr,但是当你打印 *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
期望指向空终止字符串的指针,而 %i
期望传递给数字本身,而不是指向数字的指针,这就是您所拥有的。
a
是一个 int
,所以 p
是一个指向 int
(int *
) 的指针,因此 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;
}
%s 需要一个 char*,正如您正确指出的那样,*names 是什么,因为 names 是 char** 类型。但是 %i 需要一个整数。因为p指向a,所以p是一个int指针,因为q指向p q是一个指向int指针的指针。 q 就是 p 指向的任何内容(a 的地址),因此它不会打印您想要的内容。还将类型 int 分配给 int* 的地址(这是你在执行 int* q = &p 时所做的)将产生意想不到的结果
printf("%i", *q);
会喜欢
printf("%c", *names);
这显然会产生奇怪的输出
正如c书中所写,数组名是指向第一个元素的指针,所以在names数组中,names指向第一个元素,它也是一个指向字符串文字的指针,那么*names将打印第一个元素,但是在下一行代码中,p 指向 a,q 指向 q,就像名字 arr,但是当你打印 *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
期望指向空终止字符串的指针,而 %i
期望传递给数字本身,而不是指向数字的指针,这就是您所拥有的。
a
是一个 int
,所以 p
是一个指向 int
(int *
) 的指针,因此 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;
}
%s 需要一个 char*,正如您正确指出的那样,*names 是什么,因为 names 是 char** 类型。但是 %i 需要一个整数。因为p指向a,所以p是一个int指针,因为q指向p q是一个指向int指针的指针。 q 就是 p 指向的任何内容(a 的地址),因此它不会打印您想要的内容。还将类型 int 分配给 int* 的地址(这是你在执行 int* q = &p 时所做的)将产生意想不到的结果
printf("%i", *q);
会喜欢
printf("%c", *names);
这显然会产生奇怪的输出