这两个好像都不行吧,第一个多了一层指针,第二个少了一层指针
首先你要明白指针的作用,他只是作为一个代号来使用,就如同一个人的绰号一样,或者是如门牌号
c中,每一个变量都有一个内存空间来存储他的数据,二这个内存空间是有一个地址来标示的,知道这个地址,就可以对这个变量进行操作,编辑器也是这么干的,编译成exe后,是没有变量名的存在的,只有地址来标示
一般的变量,对应的地址中存储数据,而指针变量的地址空间中存储的数据是一个地址的标示
如一般的变量,int a=5;那么a这个变量空间中的数据时5,假如a变量在内存中的地址0000 1010
那么给予int *p=&a;的话,那么p变量的内存空间中存储的数据就是0000 1010这个数据,也就是一个地址,但p变量申请的内存空间可能是0000 1016,也就是说内存空间中00001016这个地址中存储的数据时0000 1010,二内存空间0000 1010这个地址中存储的数据时5
访问p就是访问p的内存空间00001016,访问*p就是访问p指向的空间0000 1010
这样应该明白内存空间和数据之间的关系以及指针的作用了吧
接着说你的程序,其实就是一个子函数参数的问题
子函数有几个特性
1、只能返回一个数据,多个返回只能用全局变量或者指针(数组名也是指针)
2、实参和形参不在衣蛾地址空间中,除非用&取地址(这是一个指针的用法)
你的程序,返回两个数据,并且不用全局变量,那么只能用指针
程序只能有一种void swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;}
别的方式都不对
这是交换ab指针指向的空间中的内容,而不是ab指针本身
道理是不在同一个内存空间中,交换指针本身不能影响到主函数的数据
用这个&也是一样的道理
C语言中函数的参数传递都是传递值的。
假设swap函数你是这样写得
swap(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp
}。这函数内部a和b的值确实是改变了,但是在main中的a和b不会改变的。
你写得第二个程序应该编译都不会通过。temp是一个整型值,而a是一个整型指针,两者之间无法赋值。
思维混乱 整形变量去存指针地址? 你也没搞清楚局部变量的含义。