菜鸟关于指针的两个问题
用指针输出两个数中的最大值
#include<stdio.h>
int main()
{
void swap(int *p1,int *p2);
int a,b;int *pi1,*pi2;
printf("please enter a and b");
scanf("%d%d",&a,&b);
pi1=&a;pi2=&b;
if(a<b) swap(pi1,pi2);
printf("max=%d,min=%d",a,b);
return 0;
}
void swap(int *p1,int *p2)
{
int t;
t=*p1;*p1=*p2;*p2=t;
}
答案是这么写的 运行正确 我就写的是下面的
#include<stdio.h>
int main()
{
void swap(int *p1,int *p2);
int a,b;int *pi1,*pi2;
printf("please enter a and b");
scanf("%d%d",&a,&b);
pi1=&a;pi2=&b;
if(a<b) swap(pi1,pi2);
printf("max=%d,min=%d",a,b);
return 0;
}
void swap(int *p1,int *p2)
{
int *t;
t=p1;p1=p2;p2=t;
}
为什么不可以直接交换指针 ?求大神们详细解释一下啊
还有一个问题 怎么用指针指向3个数组
我想用指针调用已定义的三个数组a[10],b[10],c[10]
char *array(a[10],b[10],c[10])
括号里面是应该写数组的首地址还是数组名还是不能这么调用 求大神门给出规范写法
[解决办法]
第一个swap函数:在栈区单独开辟了三个内存区域p1,p2,t,在main函数调用swap时,将a的地址和b的地址分别传递给p1和p2,
t=*p1;把p1指向的内存里面的值赋值(a)给t;
*p1=*p2;把p2指向的内存里面的值(b)赋值给p1指向的内存(即a);
*p2=t;把t赋值给p2指向的内存(把a赋值给了b)
这三步都操作了a和b区域,在函数调用结束后,p1,p2,t的内存区域都被释放了,ab的值已经改变了
第二个swap函数:在栈区单独开辟了三个内存区域p1,p2,t,在main函数调用swap时,将a的地址和b的地址分别传递给p1和p2,
t=p1;把p1赋值给t(a的地址给t)
p1=p2;把p2赋值给p1(b的地址给a)
p2=t;把t赋值给p2(a的地址给b的地址)
并没有实际改变a和b的值,在函数调用结束后,p1,p2,t的内存区域都被释放了,ab的值还是不变
不用通过改变形参的值去改变实参的值,因为形参和实参在内存中是完全不同的区域,形参的值改变了,不会影响实参,而且函数调用结束后,分配给形参的内存区域会被释放。这类问题可以在纸上画出内存区域来分析。
指针指向3个数组要用二维数组