实验9-3 函数的形参为指针变量

来源:互联网 发布:新东方考研网络课程 编辑:程序博客网 时间:2024/06/11 09:35

实验目的:

理解地址传递的特点,掌握指针为形参时的用法。

实验步骤:

1.分析求两个整数和的函数。

1.1程序如下:

#include<stdio.h>

int add(int x,int y)

{

       int z;

       z = x + y;

       return z;

}

void main( )

{

       inta = 23, b = -5;

       intc;

       c= add(a, b);

       printf("%d + %d = %d\n",a, b, c);

}

分析:

如图1所示,C语言中函数调用最重要的特点是                    


图1  函数的传值调用

1.2程序如下:

#include<stdio.h>

int add(int *x,int *y)

{

       int z;

       z = *x + *y;

       return z;

}

void main( )

{

       inta = 23, b = -5;

       intc;

       c= add(    ,     );

       printf("%d + %d = %d\n",a, b, c);

}

分析:

1)把程序补充完整。使用函数调用add(a, b)可以吗?为什么?

2)使用函数调用add(&a, &b)可以吗?为什么?假设此时变量a和b的地址分别为0x0012ff7c和0x0012ff78,把图2补充完整。


图2  函数的传值调用

指针变量x的内容为变量a的地址,也就是说指针变量x指向了变量a,使用*x也可以访问变量a所标识的存储单元了。

3)为什么可以在add函数中使用main函数中的变量a?

答:这个问题有问题!add函数中不可以使用变量a,在add函数中只是使用了变量a所标识的存储单元!只要存储单元归程序所有就可以通过指针使用它!

2.分析下面的程序。

#include <stdio.h>

void change(float *pf)

{

       *pf= 5.23;

}

void main( )

{

       floatfa = 2.3;

       printf("%f\n", fa);

       change(&fa);

       printf("%f\n", fa);

}

分析:

change函数为何可以改变main函数中局部变量fa的值?

3.根据指针做参数的特点,改写add函数使其返回值为void,其首部为void add(int x, int y, int *pSum)。

1)改写后的函数如何使用?

2)与实验7-5中的add函数相比有何差异?

3)C语言中所有的函数都可以没有返回值吗?

4.scanf函数为何可以改变“实参”的值?

4.1当用户输入23回车时,下面的程序有何输出?

#include<stdio.h>

void main( )

{

       int i, *pi = &i;

       scanf("%d", pi);

       printf("%d,%d\n", i, *pi);

}

4.2分析下面的程序。

#include <stdio.h>

char buffer[100] = "23\n";

void scanInt(int *p)

{

       intvalue = 0;

       inti = 0;

       while(buffer[i]!= '\n')

       {

              value= value * 10 + (buffer[i] - '0');

              ++i;

       }

       *p= value;

}

void main( )

{

       inti;

       scanInt(&i);

       printf("%d\n",i);

}
原创粉丝点击