超级无敌磊果果 发表于 2019-2-21 10:10:50

定义指针的指针的时候应该用int数据类型,但是好像这样会出现问题

定义指针是什么数据类型的时候,应该看指针所指向的数据的类型,同时指针在内存中占四个字节,那么定义指针的指针在选择数据类型的时候应该选择整型对吗?因为整型刚好占据四个字节
#include <stdio.h>

void main()
{
        char num = 90;
        char *p = &num;
        int **pp = &p;
       
        printf("size of p:%d\n",sizeof(p));
        printf("num: %d\n",num);
        printf("*p: %d\n",*p);
        printf("**p: %d\n",**pp);
}

代码如上,指针p所指向的是num,num是char类型,因此定义指针p的时候用char *p;
而指针pp所指向的是p,p是一个占据了四个字节的指针,因此定义p的时候应该使用整型;

但是运行程序,打印出来的结果如下
size of p:4
num: 90
*p: 90
**p: -858993574
Press any key to continue

**pp所对应的值便出现了问题,若把格式控制符%d改成%c,输出便正常,请问哪里错了?

啊涂涂 发表于 2019-2-21 10:56:37

本帖最后由 啊涂涂 于 2019-2-21 11:01 编辑

兄弟,这个概念你给弄混淆了。首先对于32位系统,定义一个指针变量,那么系统就需要为这个指针变量开辟一个四个字节的空间,这就证明了这个指针的大小是四个字节。而指针变量我们是用来存放其他变量的地址的,所以就会有 int *p, char *p, double *p 这些个指针变量类型,*p 前面的 int, char, double 等等所表达的都是指针变量所指向的数据类型,而不是指针本身的数据类型。像你写的那个 **pp ,首先是定义了一个指针指针的指针,所以这个 **pp 的类型必须是和他所指向的指针指向的数据内容保持一致的

char a = 'A';

char *p = &a      (我们说指针p指向a, char表达的是 a 是哪个类型的数据)

char **pp         (定义一个指向指针的指针,准备要指向 *p)

char **pp = &p(因为指针变量p指向的是字符类型,现在想把pp指向p,所以pp的类型也要是char类型才可以)

jackz007 发表于 2019-2-21 12:05:13

    考察一下代码:
    char c , * p ;
    intd , * q ;
    . . . . . .
    c = * p      ;
    d = * q      ;
    p 、q 同是指针,却类型不同,因为这个不同,在代码编译的时候,对指令 c = * p,会处理成从内存地址 p 处取 1 个字节赋值给变量 c,对指令 d = * q,会处理成从内存地址 q 取 4 个字节赋值给变量 d,这就是不同指针类型带来的差异。
页: [1]
查看完整版本: 定义指针的指针的时候应该用int数据类型,但是好像这样会出现问题