本文共 1414 字,大约阅读时间需要 4 分钟。
实验目的:
理解地址传递的特点,掌握指针为形参时的用法。
实验步骤:
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);
}转载地址:http://oddti.baihongyu.com/