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

本文通过一系列实验,深入探讨C语言中指针作为函数形参的特点。首先,通过对比普通参数传递与指针传递,解释地址传递的优势;接着,分析指针如何用于修改函数外部变量的值,以及void类型函数在处理指针参数时的用法;最后,讨论scanf函数和手动解析字符串到整数的过程,展示指针在实际编程中的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的:

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

实验步骤:

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);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值