鱼C论坛

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

[新人报道] 指针互换数字问题?

[复制链接]
发表于 2022-7-18 22:20:39 | 显示全部楼层 |阅读模式

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

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

x
int main()
{
        int i=3,j=5;
        int *p,*q,*t;
       
        p=&i;
        q=&j;
        *t=*p;//这里为什么不能用*t,必须用int t;不 理解,哪位大神给解释一下?
        *p=*q;
        *q=*t;
        printf("i=%d,j=%d\n",*p,*q);//这里打印不显示,为什么?
       
        return 0;
       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-19 06:26:02 From FishC Mobile | 显示全部楼层
*p   *q都是int类型,和它对等的自然也得是int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 16:34:04 | 显示全部楼层
本帖最后由 jackz007 于 2022-7-19 17:18 编辑
        int * p , * q * t ;
        p = & i ;
. . . . . .
        * t = * p
      这一句代码的意思是把 p 所指向的内存中的一个 int 数值(4 个字节,其实就是 i)存放到 指针 t 所指向的内存地址,我们知道,t 在被定义后,没有被赋值,就是说,t 并没有指向任何一个有效的内存单元地址,这个时候,要把变量 i 的数值(4 个字节)保存到一个根本就不存在的内存地址中,完全是行不通的。如果把 t 定义成 int 就不会存在这个问题了,这样,t 会在堆栈中得到 4 个字节的存储空间,完全可以用于保存 i 的数值。
#include <stdio.h>

int main(void)
{
        int i = 3 , j = 5 , * p , * q , t       ;  
        p = & i                                 ; // p 指向了 i,那么,* p 就是 i
        q = & j                                 ; // q 指向了 j,那么,* q 就是 j
        t = * p                                 ; // 其实就是 t = i
        * p = * q                               ; // 其实就是 i = j
        * q = t                                 ; // 其实就是 j = t
        printf("i = %d , j = %d\n" , * p , * q) ; // 打印 i 值和 j 值
        return 0                                ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 10:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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