细节窥视

作者在 2008-03-13 22:43:18 发布以下内容
1./*使用return从函数中返回一个值*/
#include<stdio.h>
int f1(int x,int y)   
{
    return x>y?x:y;/*条件表达式的值是x和y中较大的一个,并且该数值被返回给调用函数.
不过这里最好把返回值放在圆括弧里,即return (x>y)?x:y;这样程序会显得更清晰或风格更好.*/
}
int f2(int x,int y)
{
    return (x>y)?y:x;
}
void main()
{
int a=4,b=3,c=5,d,e,f;
d=f1(a,b);  d=f1(d,c);
e=f2(a,b);  e=f2(e,c);
f=a+b+c-d-e;
printf("%d,%d,%d\n",d,f,e);
}
执行后的结果:5,4,3
分析:函数的返回值是通过函数中的return语句来获得的,此语句将被调用函数的一个确定的值返回给主函数,还有此程序也反映了程序是顺序的形式执行的.

2./*指针作函数参数时的运算*/
void fun(char*a,char*b)/*形式参数*/
{
a=b;/*把指针b指向的地址赋给了指针a*/
(*a)++;/*一元运算符*和++具有相同的优先级,但是它在结合时是从右到左进行的,像(*a)++实现了    a所指向的数据自加1,而不是指针自增1.即指针所指向的地址不变,但其元素却变成了一个新数据.*(a++)实现了指针自增1*/
}
void main()
{
char c1='A',c2='a',*p1,*p2;/**/
p1=&c1;
p2=&c2;
fun(p1,p2);/*实际参数*/
printf("%c%c\n",c1,c2);
}
运行结果:Ab
分析:指针做函数参数和用变量作函数参数不同.前者可以在被调用函数中改变变量的值,而后者不能.
在本题中,主函数在调用一个以指针变量作为形参的子函数时,以两个支付变量的地址指针作为实参传给被调用函数.
实参和形参传递的过程相当于*(a=p1),*(b=p2)看一下面的运行结果便知
#include<stdio.h>
void fun(char*a,char*b)
{
    printf("%c%c\n",*a,*b);
    printf("%p%p\n",*a,*b);
    printf("%p%p\n",a,b);
a=b;(*a)++;
printf("%p%p\n",a,b);
}
void main()
{
char c1='A',c2='a',*p1,*p2;
p1=&c1;
p2=&c2;
printf("%c%c\n",p1,p2);
printf("%p%p\n",p1,p2);
fun(p1,p2);
printf("%c%c\n",c1,c2);
}
知识点滴 | 阅读 1826 次
文章评论,共0条
游客请输入验证码