博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验9-3 函数的形参为指针变量
阅读量:4144 次
发布时间:2019-05-25

本文共 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/

你可能感兴趣的文章
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>