鱼C论坛

 找回密码
 立即注册
查看: 1798|回复: 2

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

[复制链接]
发表于 2019-2-21 10:10:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
定义指针是什么数据类型的时候,应该看指针所指向的数据的类型,同时指针在内存中占四个字节,那么定义指针的指针在选择数据类型的时候应该选择整型对吗?因为整型刚好占据四个字节
#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类型才可以)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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类型才可以)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-21 12:05:13 | 显示全部楼层
    考察一下代码:
    char c , * p ;
    int  d , * q ;
    . . . . . .
    c = * p      ;
    d = * q      ;
    p 、q 同是指针,却类型不同,因为这个不同,在代码编译的时候,对指令 c = * p,会处理成从内存地址 p 处取 1 个字节赋值给变量 c,对指令 d = * q,会处理成从内存地址 q 取 4 个字节赋值给变量 d,这就是不同指针类型带来的差异。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 08:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表