zyj1214 发表于 2022-7-18 22:20:39

指针互换数字问题?

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;
       
}

wp231957 发表于 2022-7-19 06:26:02

*p   *q都是int类型,和它对等的自然也得是int

jackz007 发表于 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                              ;
}
页: [1]
查看完整版本: 指针互换数字问题?