数组和指针链

时间:2015-12-09 21:47:05

标签: c pointers arr

正如c书中所写,数组名是指向第一个元素的指针,因此在names数组中,名称指向第一个元素,它也是指向字符串文字的指针,然后* names将打印第一个元素,但是在下一个元素中代码行p指向a,q指向q,就像名字arr一样,但是因为你打印* qu得不到值为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;
}

3 个答案:

答案 0 :(得分:1)

区别在于printf()%s需要一个指向空终止字符串的指针,而%i期望传递数字本身,而不是指向数字的指针,这就是你所拥有的。

答案 1 :(得分:1)

aint,因此p是指向intint *)的指针,因此q是指针指向intint **)的指针。要打印int,请将int提供给printf

printf("This is an int: %i\n", 42);

因此对于%i,函数printf需要int类型的参数,但是您将*q传递给它int *类型。您将指针传递给printf,它不指望数字指针,仅用于字符串。

答案 2 :(得分:0)

这就是工作代码应该是什么样子

#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 *,正如你所说的那样是* name是什么,因为name是char **类型。但是%i期望一个int。由于p指向a,p是int指针,因为q指向p q是指向int指针的指针。 q就是p所指向的(a的地址)所以它不会打印出你想要的东西。同时将类型int 分配给int *的地址(当你执行int * q =&amp; p时你正在做的事情)会产生意想不到的结果

printf("%i", *q);

就像在做

printf("%c", *names);

这显然会给出奇怪的输出