彻底搞定C语言指针 第五篇
当前位置:以往代写 > C/C++ 教程 >彻底搞定C语言指针 第五篇
2019-06-13

彻底搞定C语言指针 第五篇

彻底搞定C语言指针 第五篇

副标题#e#

一、三道考题

开讲之前,我先请你做三道题目。(嘿嘿,得先把你的脑子搞昏才行 ……唉呀,谁扔我鸡蛋?)

1.考题一:措施代码如下:

void Exchg1(int x, int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf (“x=%d,y=%d\n”,x,y)
}
void main()
{
int a=4,b=6;
Exchg1 (a,b) ;
printf(“a=%d,b=%d\n”,a,b)
}

输出的功效 :

x=____, y=____

a=____, b=____

问下划线的部门应是什么,请完成。

2.考题二:代码如下。

Exchg2(int *px, int *py)
{
int tmp=*px;
*px=*py;
*py=tmp;
print(“*px=%d,*py=%d\n”,*px,*py);
}
main()
{
int a=4;
int b=6;
Exchg2( &a,&b);
Print (“a=%d,b=%d\n”, a, b);
}

输出的功效为:

*px=____, *py=____

a=____, b=____

问下划线的部门应是什么,请完成。

3.考题三:

Exchg2(int &x, int &y)
{
int tmp=x;
x=y;
y=tmp;
print(“x=%d,y=%d\n”,x,y);
}
main()
{
int a=4;
int b=6;
Exchg2(a,b);
Print(“a=%d,b=%d\n”, a, b);
}

输 出的功效:

x=____, y=____

a=____, b=____

问下划线的部门输出的应是什么, 请完成。

你不在机子上试,能作出来吗?你对你写出的谜底有多大的掌握?

正确的谜底 ,想知道吗?(呵呵,让我逐步地汇报你吧!)

好,空话少说,继承我们的摸索之旅了。

我们都知道:C语言中函数参数的通报有:值通报,地点通报,引用通报这三种形式。题一为值 通报,题二为地点通报,题三为引用通报。不外,正是这几种参数通报的形式,曾把我给搞得晕头转向 。我相信也有许多人与我有同感吧?

下面请让我逐个地谈谈这三种通报形式。


#p#副标题#e#

二、函数 参数通报方法之一:值通报

1.值通报的一个错误认识

先看题一中Exchg1函数的界说:

void Exchg1(int x, int y)   //界说中的x,y变量被称为Exchg1函数的形式参数
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf(“x=%d,y=% d\n”,x,y)
}

问:你认为这个函数是在做什么呀?

答:仿佛是对参数 x,y的值对换吧?

请往下看,我想操作这个函数来完成对a,b两个变量值的对换,措施如下:

void main()
{
int a=4,b=6;
Exchg1 (a,b)     //a,b变量为 Exchg1函数的实际参数。
/  printf(“a=%d,b=%d\n”,a,b)
}

我问:Exchg1 ()里头的  printf(“x=%d,y=%d\n”,x,y)语句会输出什么啊?

我再问:Exchg1 ()后的  printf(“a=%d,b=%d\n”,a,b)语句输出的是什么 ?

措施输出的功效是:

x=6 , y=4

a=4 , b=6  //为什么不是a=6,b=4呢?

奇怪,显着我把a,b别离代入了x,y中,并在函数里完成了两个变量值的互换,为什么a,b变量 值照旧没有互换(仍然是a==4,b==6,而不是a==6,b==4)?假如你也会有这个疑问,那是因为你跟本 就不知实参a,b与形参x,y的干系了。

2.一个预备的知识

为了说明这个问题,我先给出 一个代码:

int a=4;

int x;

x=a;

x=x+3;

看好了没,此刻我问 你:最终a值是几多,x值是几多?

(怎么搞的,给我这个小儿科的问题。还不简朴,不就是a==4   x==7嘛!)

在这个代码中,你要大白一个对象:固然a值赋给了x,可是a变量并不是x变量哦 。我们对x任何的修改,都不会改变a变量。呵呵!固然简朴,而且一看就理所虽然,不外但是一个很重 要的认识喔。

3.领略值通报的形式

看挪用Exch1函数的代码:

main()
{
int a=4,b=6;
Exchg1(a,b) //这里挪用了Exchg1函数  
printf(“a=% d,b=%d”,a,b)
}

Exchg1(a,b)时所完成的操纵代码如下所示。
int x=a;//←
int y=b;//←留意这里,头两行是挪用函数时的隐含操纵
int tmp;
tmp=x;
x=y;
y=tmp;

请留意在挪用执行Exchg1函数的操纵中我工钱地加上 了头两句:

int x=a;

int y=b;

这是挪用函数时的两个隐含行动。它确实存在, 此刻我只不外把它显式地写了出来罢了。问题一下就清晰起来啦。(看到这里,此刻你认为函数内里交 换操纵的是a,b变量可能只是x,y变量呢?)

本来 ,其实函数在挪用时是隐含地把实参a,b 的 值别离赋值给了x,y,之后在你写的Exchg1函数体内再也没有对a,b举办任何的操纵了。互换的只是x, y变量。并不是a,b.虽然a,b的值没有改变啦!函数只是把a,b的值通过赋值通报给了x,y,函数里头 操纵的只是x,y的值并不是a,b的值。这就是所谓的参数的值通报了。

#p#分页标题#e#

哈哈,终于大白了,正是 因为它隐含了那两个的赋值操纵,才让我们发生了前述的疑惑(觉得a,b已经取代了x,y,对x,y的操 作就是对a,b的操纵了,这是一个错误的概念啊!)。

    关键字:

在线提交作业