鱼C论坛

 找回密码
 立即注册
查看: 2138|回复: 3

[已解决]指针 指针变量

[复制链接]
发表于 2018-4-29 12:05:18 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

void main()
{

        int *p1,*p2,*p,a,b;

        scanf("%d,%d",&a,&b);
        p1 = &a;//&a是a的地址,*p1指针变量存放a的地址
        p2 = &b;
        
        if( a < b)
        {
                p = p1;
                p1 = p2;
                p2 = p;
        }
        printf("%d,%d\n",a,b);//取指操作变量值*a,*b等价

        printf("%d,%d\n",*&p1,*&p2);//右到左,先&后*,意思取p1地址,然后*取p1的值(p1值存的a的地址,等同&a)。
        printf("%d,%d\n",&a,&b);//取a的地址,b的地址。
        printf("%d,%d\n",&*p1,&*p2);//右到左,先*后&,意思取*p1的值,然后&取p1的地址(p1的值)。
        printf("%d,%d\n",p1,p2);//p1指针变量存的a地址.
        printf("%d,%d\n",&p1,&p2);//看指针变量的内存地址
        printf("%d,%d\n",*p1,*p2);//获取值
}
问1:指针变量比较特殊,存放指针而用,如果只定义不存储,*p1是否在内存里开辟空间?怎样求占得大小?还是int声明指针变量后就是4字节?
问2:p1存储的值是a的地址,*取值操作,为什么会输出变量值? p1 = &a, *p1 = *&a这样理解?
        如果:p1指针变量存储a地址(2000),*p1不该是取p1值2000吗?为什么取2000这个地址对应的值,那就是相当于说取p1存储值的值。
        本身&p1指针变量也是有自己的地址的,*&p1取的是2000?也就是&a地址?

谢谢大佬们!
最佳答案
2018-4-29 12:43:40
问1:*p1 你声明什么类型,他就是什么类型的大小。
问2:p1只存放地址,取值当然是取这个地址处存入的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-29 12:43:40 | 显示全部楼层    本楼为最佳答案   
问1:*p1 你声明什么类型,他就是什么类型的大小。
问2:p1只存放地址,取值当然是取这个地址处存入的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-29 15:53:01 | 显示全部楼层
ba21 发表于 2018-4-29 12:43
问1:*p1 你声明什么类型,他就是什么类型的大小。
问2:p1只存放地址,取值当然是取这个地址处存入的值

我脑子思想有一定概念性错误,总感觉既然存储的地址,他值理所应当是地址= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-29 19:19:32 | 显示全部楼层
理想小青年 发表于 2018-4-29 15:53
我脑子思想有一定概念性错误,总感觉既然存储的地址,他值理所应当是地址= =

慢慢来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-29 18:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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