c语言中的几个关于* &的指针问题还有构造函数问题(不要扯c++上去了)
一.构造函数方面的,比如说构造一个fun。intfun(inta,floatb,doublec,chard)这个比较好理解,但是有时候括号里面的量带有*符号比如myadd...
一.构造函数方面的,比如说构造一个fun。int fun(int a,float b,double c,char d)这个比较好理解,但是有时候括号里面的量带有*符号 比如myadd(int *a,int *b),此时main中的语句竟然是z=myadd(&x,&y);除了这个还有更不能理解的" 编写函数order(int *a,int *b),使调用函数中的第一个参数总是存放两个数中较小的数,第二个参数存放两个数中较大的数" void swap(int *a,int *b){*a=*a+*b;*b=*a-*b;*a=*a-*b;} void order(int *p,int *q){ if(*p>*q) swap(p,q);}main(){int i,j;printf("i,j=");scanf("%d%d",&i,&j);order(&i,&j);printf("i=%d j=%d",i,j);getch();} (注意红色部分 为什么不是&p &q?)二.还是构造函数方面的,构造了一个fun。void与return 。没有void,就一定有return吗? 有void,就一定没有return x吗? 若没有void,fun的{}除了以return x结尾外,好像还能以printf结尾对吗?除了return x,printf结尾,还能用什么结尾?有时候直接写"return;"而不是“return z ”这种形式(猜想可能是void fun),为什么?还有一个小问题 return 0;具体是什么意思啊?三.关于“如何通过指针把函数中的多个结果传回主函数”,函数体中有多个return时候 只执行第一个(我记得好像听过这么一句话),例如“请编写函数,对传送过来的三个数选出最大数和最小数,并通过形参传回调用函数”void func(int *x,int *y,int *z,int *max,int *min){ *max=(*x>*y?*x:*y)>(*x>*z?*x:*z)?(*x>*y?*x:*y):(*x>*z?*x:*z);*min=(*x<*y?*x:*y)<(*x<*z?*x:*z)?(*x<*y?*x:*y):(*x<*z?*x:*z);} main(){ int a,b,c,max,min;scanf("%d%d%d",&a,&b,&c);func(&a,&b,&c,&max,&min);printf("max=%d min=%d\n",max,min);getch();return 0;}请高手细心解答,在下不胜感激,有高分相赠!
展开
4个回答
展开全部
首先,对楼主的好学好问精神相当赞赏。
对于第一个问题,myadd中传递的两个参数是指针类型,而指针类型的变量中保存的值是内存地址,调用此函数时用&就是取对应变量地址之意。注意这* &两个符号的含义——取指针对应地址的内容和取内容对应的地址。
下一个问题,void意思是该函数结束时不会有返回值,故无return x之说,你要return x,编译器会报错的,return 0;则是函数返回值为零,函数定义时是有返回值的,即非void型函数。
第三个问题,因为在函数结束时,函数会释放它的堆栈,相应的局部变量(形参)将会释放掉,但是如果传的值是指针,函数中改变的内容将与函数堆栈内容无关,修改的是指针指向对应内存的位置,故可以作多个修改(传多个指针,修改多个指针指向的内存空间)。
最后一个问题,return的意思是函数返回,只要调用这一语句,函数即刻返回,该语句下的所有语句将不会被执行。
最后祝楼主的C语言之路越走越棒!!
对于第一个问题,myadd中传递的两个参数是指针类型,而指针类型的变量中保存的值是内存地址,调用此函数时用&就是取对应变量地址之意。注意这* &两个符号的含义——取指针对应地址的内容和取内容对应的地址。
下一个问题,void意思是该函数结束时不会有返回值,故无return x之说,你要return x,编译器会报错的,return 0;则是函数返回值为零,函数定义时是有返回值的,即非void型函数。
第三个问题,因为在函数结束时,函数会释放它的堆栈,相应的局部变量(形参)将会释放掉,但是如果传的值是指针,函数中改变的内容将与函数堆栈内容无关,修改的是指针指向对应内存的位置,故可以作多个修改(传多个指针,修改多个指针指向的内存空间)。
最后一个问题,return的意思是函数返回,只要调用这一语句,函数即刻返回,该语句下的所有语句将不会被执行。
最后祝楼主的C语言之路越走越棒!!
展开全部
其实这是关于指针的问题。在指针中,int* a表示设定一个指针,指针名字是a,指针指向的变量类型是整形,而光是*a则是表示调用调用指针所指向的变量的值,而&a则是指指针a在电脑中存储的地址。例如,int* a;int t=10;a=&t;则a中存入的就是变量t的内存地址,a=XCD487(随便写的值,指的是t的内存地址),同时,虽然a中存入的是t的内存地址,但是a也是一个变量,它也有内存地址,&a就是取a的内存地址,*a==t==10,因为*a取得是a所指向的变量的值嘛。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题的答案楼上的都说了,推荐你好好看下谭浩强的C程序设计,看完后这些问题就明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询