指针互换数字问题?
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;
} *p *q都是int类型,和它对等的自然也得是int 本帖最后由 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]