c语言指针法变量交换,为什么返回值为指针,main函数取值不成功?代码如下
打个比方,假设 a 的地址为 2000,b 的地址为 2100。。然后将 2000 和 2100 作为参数传入函数。。
星号是取值符号。。*p1,也就是地址为 2000 的内存所存储的值。。
temp=*p1;
*p1=*p2;
*p2=temp;
这个交换,就是把地址为 2000 和 2100 的内存所存储的值进行交换。。
这样一来,a 和 b 的值也就交换过来了。。
没错。。其实 *p1 的地址就是 a 的地址。。只是表达方式不同。。对 *p1 进行操作,就相当于对变量 a 进行操作。。不管在函数体内,还是函数体外。。
C语言中的任何函数形参都是值传递。所谓引用传递,不过是指针的值传递而已。
你的函数做的工作只是交换函数中的两个临时变量a和b的值,结果不会影响到外部的实参pa和pb。如果想要交换两个指针的值,你的形参应该为两个二级指针。
1、你是要做变量a和变量b的数据交换,而最后打印的是全局变量*x和*y,全局指针变量x和y是未经过初始化的指针,指向不了有效内存,所以在你printf时必然崩溃。
2、全局指针变量x和y没有必要定义。
3、交换函数的形参指针变量x和y,这两个指针变量与全局指针变量x和y没有关系,在jiaohuan函数中,对形参指针变量x和y做操作并不影响全局指针变量x和y。
4、在jiaohuan函数中,你所做的交换只是对指针进行赋值,并没有交换指针指向的数据,所以也完成不了交换任务。
5、jiaohuan函数的返回值为int型指针,但该函数中并没有返回一个指针变量。
思考int t时的t与int *时的t的区别
前者作为整型变量,可以直接获取对应值。而后者指向整型数据,需要"*t"表示获取内容。此时单独用t则表示使用其指针地址(而非指向的数据).
当函数调用完后就会被其空间被释放,你只是交换了两个元素的地址并没有改变元素的值..所以
void swap(int* a,int8 b)
{
int t=*a;
*a=*b;
*b=t;
}
int main()
{
int a=3,b=5;
swap(&a,&b);//要想在被调用函数改变原函数的值只能发送其地址;
printf(".....你自己写");
}
c语言 用指针方法处理 输入12个整数,求出最大值和最小值,并交换
include "stdio.h"int main(int argc,char *argv[]){ int n,*pn=&n,max,min,i;printf("Please enter 12 integers...\\n");for(i=0;i<12;i++){ scanf("%d",pn);if(i){ if(max<*pn)max=*pn;if(min>*pn)min=*pn;} else max=min=*pn;} printf("The MAX is %d\\nThe ...
编程 定义两个整型变量x和y,进行值得交换(用指针的形式)后,将两个数...
可以定义两个指针 然后分别指向x y 然后通过指针变量的指向进行交换。这个比较简单 就不写源代码了。中心思想:int t;t=*p1;p1=*p2;p2=t;
c语言问题,用指针方法处理 输入10个整数,将其中最小的数与第一个数交...
\/\/下面我跟你分析下关键的一些语句p=a; \/\/指针p初始指向数组a,亦即指向数组的首元素地址,这个我想你是清楚的max=min=*p; \/\/初始默认a[0]既是最大值有时最小值for(i=0;i<10;i++)if(min>*(p+i)) min=*(p+1); \/\/这个for循环是求取最小值并赋值给min保存for(i=0;i<10;i+...
C语言,请问把a,b的地址赋给两个指针变量后,指针变量交换会交换a,b地址...
int t,*pa,*pb pa=a;*pb=b;t=*pa;pa=*pb;pb=t;这样才能实现指针的指向对象的交换,只是赋值的话不会改变内存中的值。
c语言交换变量a和b的值是什么?
c语言交换变量a和b的值是:p、q,但没有给它们分配地址。后面的程序,p、q分别指向了a、b的地址,所以可用。这个与媒介无关,计算机原理中很清楚地讲到,内存地址和内容,这个是C语言的基础。c语言交换变量a和b的值是互相交换的。交换在常规办法中引入第三个变量是为了防止在赋值过程中丢失信息。
用指针方法处理:输入10个数,将其中最小的数与第一个数对换,把最大的...
c 语言程序:include <stdio.h> void jh(int *a, int n){ int da_i=9,xiao_i=0,v;int i;v=a[0];for (i=0;i<n;i++) if (a[i]<v){v=a[i];xiao_i=i;};v=a[0];a[0]=a[xiao_i];a[xiao_i]=v;v=a[n-1];for (i=0;i<n;i++) if (a[i]>v){v=a[...
c语言指针:从键盘输入两个整数给c1,c2两个变量,用函数交换c1和c2的...
include<stdio.h> void fun(int *c1,int *c2) { int k; k=*c1; *c1=*c2; *c2=k; } void main() { int c1,c2;scanf("%d%d",&c1,%c2); fun(&c1,&c2); printf("%d %d\\n",c1,c2);}
...最小数与最后一个数交换(要求用指针方法实现)
include <stdio.h> include <conio.h> void main(){ int i,min,max,temp,t1,t2,a[10],*p=a;for(i=0;i<10;i++)scanf("%d",p+i);min = a[0];max = a[0];t1=0;t2=0;for(i=0;i<10;i++){ if(min>a[i]){ min=a[i];t1=i;} if(max<a[i]){ max=a[i];t2...
用C++编写一个利用指针,编写用于交换两个整型变量值的函数,谢谢大虾们...
void fun(int* a,int* b){ int n=*a;a=*b;b=n;}
编写一个交换变量值的函数,利用该函数交换数组a和数组b中的对应元素...
include<stdio.h> include<stdlib.h> void ex(int *a, int *b, int n){ int i,tmp;for (i=0;i<n;i++){ tmp=a[i];a[i]=b[i];b[i]=tmp;} } void main(){ int x[5]={1,2,3,4,5};int y[5]={6,7,8,9,10};int i,n=5;ex(x,y,n);printf("\\n X: ")...
郯洋四维: 代码存在以下问题1、你是要做变量a和变量b的数据交换,而最后打印的是全局变量*x和*y,全局指针变量x和y是未经过初始化的指针,指向不了有效内存,所以在你printf时必然崩溃.2、全局指针变量x和y没有必要定义.3、交换函数的形参指针变量x和y,这两个指针变量与全局指针变量x和y没有关系,在jiaohuan函数中,对形参指针变量x和y做操作并不影响全局指针变量x和y.4、在jiaohuan函数中,你所做的交换只是对指针进行赋值,并没有交换指针指向的数据,所以也完成不了交换任务.5、jiaohuan函数的返回值为int型指针,但该函数中并没有返回一个指针变量.
高坪区15948518724: C语言的指针在函数里面把变量a和b的值交换后为什么能传回main函数? - ?
郯洋四维: 打个比方,假设 a 的地址为 2000,b 的地址为 2100..然后将 2000 和 2100 作为参数传入函数.. 星号是取值符号..*p1,也就是地址为 2000 的内存所存储的值.. temp=*p1;*p1=*p2;*p2=temp; 这个交换,就是把地址为 2000 和 2100 的内存所存储的值进行交换.. 这样一来,a 和 b 的值也就交换过来了..没错..其实 *p1 的地址就是 a 的地址..只是表达方式不同..对 *p1 进行操作,就相当于对变量 a 进行操作..不管在函数体内,还是函数体外..
高坪区15948518724: C语言中,*pa,*pb是指向a,b的指针.直接将a,b的值互换,为什么指针还是指向原来的值啊?? - ?
郯洋四维: int a=1,b=2,t; int *pa,*pb; pa=&a; //之前已经说a=1了,所以pa=1喽?结果没错 pb=&b; //之前已经说b=2了,所以pb=2喽?结果没错 t=a;a=b;b=t; 楼主是不是打错题了?
高坪区15948518724: C语言:我使用子函数将指针变量中的指针进行交换,但是为什么所指向的变量却没有变?程序如下: - ?
郯洋四维: C语言中的任何函数形参都是值传递.所谓引用传递,不过是指针的值传递而已.你的函数做的工作只是交换函数中的两个临时变量a和b的值,结果不会影响到外部的实参pa和pb.如果想要交换两个指针的值,你的形参应该为两个二级指针.
高坪区15948518724: "用指针法交换两个变量里的值"c语言及讲解 - ?
郯洋四维: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17#include "stdio.h" voidswap(int* x,int* y); voidmain() {intx,y;scanf("%d%d",&x,&y);swap(&x,&y);//传递变量的地址printf("main:x = %d y = %d\n",x,y); } voidswap(int* x,int* y)//接收实参传递过来...
高坪区15948518724: c语言指针交换 - ?
郯洋四维: 这个是这样的,因为指针变量一般就是32位的长度,同样int类型也是32位的长度,p1里面的地址也是能放在p里面存储的(char ,short类型就不行了).但是对于编译器来说,存放在p里面,他就认为是一个整数,所以就不能做一些指针的操作了,比如*p.但是如果只是向你这种只是简单交换一下值是没问题的.
高坪区15948518724: C语言指针使用函数交换两个变量的值 - ?
郯洋四维: 这个地方会出现不好理解的东西. 调用函数的时候,你放入了int a int b 但是这其实不是你的main函数中的a b只是相当于他们的副本,也就是复制了一个a 和b 传入函数 所以你改变的只是传入的副本 也就是复制的副本a b所以在main函数中打印的ab不会出现变化 依然是a=3,b=6 现在回答第二个问题,怎么会让ab的值变化:传入指针,也就是在main函数中使用a b的指针,然后吧指针传入到函数里面 这个时候ab就会真正的发生变化,因为指针指向的是ab的物理地址,也就是真正的ab,不是副本,这个时候就会改变ab的值.想要理解,可以去百度传值参数和引用参数.纯手打,望采纳
高坪区15948518724: C语言指针作函数参数时的返回问题 - ?
郯洋四维: 首先,弄懂函数参数都是靠值传递.指针也是. 进入函数后,函数创建几个空间给形参,再把实参数值拷过来.退出函数时,把形参空间释放,则影响不到实参.这就是值传递. swap(int *p1,int *p2)函数首先创建两个空间,是指针,再把实参...
高坪区15948518724: C语言用指针交换数值 - ?
郯洋四维: #includevoid swap1(int a1, int b1){ int temp1; temp1 = a1; a1 = b1; b1 = temp1;}void swap2(int *a2, int *b2){ int temp2; temp2 = *a2; *a2 = *b2; *b2 = temp2;}void main(){ int a = 1949, b = 2008; printf("变量a,b的初始值分别为: a=%d,b=%d\n", a...
高坪区15948518724: C语言指针函数的返回值问题 - ?
郯洋四维: 因为后面这个返回的是栈指针,函数结束就消失了