鱼C论坛

 找回密码
 立即注册
查看: 4109|回复: 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;
       
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-19 06:26:02 From FishC Mobile | 显示全部楼层
*p   *q都是int类型,和它对等的自然也得是int
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 16:34:04 | 显示全部楼层
本帖最后由 jackz007 于 2022-7-19 17:18 编辑
  1.         int * p , * q * t ;
  2.         p = & i ;
  3. . . . . . .
  4.         * t = * p
复制代码

      这一句代码的意思是把 p 所指向的内存中的一个 int 数值(4 个字节,其实就是 i)存放到 指针 t 所指向的内存地址,我们知道,t 在被定义后,没有被赋值,就是说,t 并没有指向任何一个有效的内存单元地址,这个时候,要把变量 i 的数值(4 个字节)保存到一个根本就不存在的内存地址中,完全是行不通的。如果把 t 定义成 int 就不会存在这个问题了,这样,t 会在堆栈中得到 4 个字节的存储空间,完全可以用于保存 i 的数值。
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         int i = 3 , j = 5 , * p , * q , t       ;  
  5.         p = & i                                 ; // p 指向了 i,那么,* p 就是 i
  6.         q = & j                                 ; // q 指向了 j,那么,* q 就是 j
  7.         t = * p                                 ; // 其实就是 t = i
  8.         * p = * q                               ; // 其实就是 i = j
  9.         * q = t                                 ; // 其实就是 j = t
  10.         printf("i = %d , j = %d\n" , * p , * q) ; // 打印 i 值和 j 值
  11.         return 0                                ;
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 20:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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