必备知识:c语言中的函数调用和指针变量的相关知识

众所周知,函数是C语言中一个十分重要的模块,因为函数的存在,使得C语言的可读性、可维护性、可移植性大大提高。因此,想要学好C语言,必须要学好函数。函数的一个功能就是传递数值进行运算,那么我们如何利用函数和指针变量通过形参变量的值改变实参变量的值呢?

首先,让我们先举一个例子。

#include

int main()

{

void func(int a,int b);

int x,y;

printf("please enter two numbers:\n");

scanf("%d%d",&x,&y);

func(x,y);

printf("%d,%d\n",x,y);

}

void func(int a,int b)

//函数的功能若a>b,则调换a,b的值

{

int c;

if(a>b)

{

c=a;

a=b;

b=c;

}

}

结果:

图片发自简书App

分析:函数func的功能是若a>b,则调换a,b的值,而我们输入的数为12,6,且12>6,但是值却没有按预期调换,为什么呢?

这是因为函数调用中,虚实结合传递的是变量的值,且为单向传递,即实际参数向形式参数传递值,但是形式参数却不能向实际参数传递值。因此,在上述的程序中,虽然x的值12传给了a,y的值6传给了b,在被调用的函数func中,a,b的值确实互换了,但是却不能影响实参x,y的值。因此,在调用结束后,x,y的值是不会变化的。

下面,就开始引入今天的重头戏--指针变量。我们仍然通过一个程序来说明。

ps:不是我太懒,只是只有通过具体的程序才能更好的理解。

#include

int main()

{

void func(int *a,int *b);

int x,y;

int *x_pointer,*y_pointer;

printf("please enter two numbers:\n");

scanf("%d,%d",&x,&y);

x_pointer=&x;

y_pointer=&y;

func(x_pointer,y_pointer);

printf("The result:\n");

printf("%d,%d\n",x,y);

}

void func(int *a,int *b)

//函数的功能若a>b,则调换a,b的值

{

int c;

if(*a>*b)

{

c=*a;

*a=*b;

*b=c;

}

}

结果:

图片发自简书App

上面的程序成功地交换了x,y的值,这是为什么呢?

上述函数调用中,虚实结合传递的仍然是变量的值,且为单向传递,却仍能交换x,y的值,why?

这就要归功于指针变量了!指针变量即为地址变量,是储存变量在内存中地址的变量。x_pointer=&x,y_pointer=&y即为使x_pointer储存x的地址,y_pointer储存y的地址。

在函数调用中,传递的是x,y的地址,那么a,b也分别储存x,y的地址,那么*a,*b即为x,y,交换*a,*b的值即为交换x,y的值。所以,通过函数和指针变量即可实现通过形参变量的值改变实参变量的值。

c语言中函数形参值改变了,相应的实参值是否改变,C语言中,如何利用函数和指针变量通过形参变量的值改变实参变量的值...相关推荐

  1. c语言中浮点错误指的是什么意思,您好,请问一下C语言中float是什么意思?具体的问题请看下面...

    float是C语言的基本数据类型中的一种,表示单精度浮点数. C语言规定单精度浮点型在内存占用4个字节,精度为7位,取值范围为:3.4*10^-38 ~3.4*10^38或者-(3.4*10^-38 ...

  2. c语言中什么函数可以作为虚函数,C++语言中的“虚函数”就像C语言中的指针,必须要弄懂的...

    上一节较为详细的讨论了C++语言中基类被派生类继承过程中的内存模型,尤其较为详细的分析了虚函数及其虚表.虚表指针在内存中是如何分布,如何存储的,这对于理解C++语言中的"动态绑定" ...

  3. main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...

    PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...

  4. 在c语言中 一个函数一般由两个部分组成的,在C语言中,一个函数一般由两个部分组成,它们是______和______。...

    在C语言中,一个函数一般由两个部分组成,它们是______和______. 更多相关问题 [判断题]铁能从硫酸铜溶液中取代出铜,是因为铁与硫酸根具有更大的亲和力. A. 对 B. 错 [多选题]进行关 ...

  5. c语言fputc 函数头,简单对比C语言中的fputs()函数和fputc()函数

    简单对比C语言中的fputs()函数和fputc()函数 C语言fputc()函数:写文件函数(将一指定字符写入文件流中) 头文件: #include 定义函数: int fputc(int c, F ...

  6. c语言其他函数调用main函数,C语言中的main函数以及main函数是如何被调用的

    main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...

  7. c语言自动生成系统时间函数,使用C语言中的time函数获取系统时间

    使用C语言中的time函数获取系统时间 可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算.其原型为: time ...

  8. c语言里面gets(a)是什么意思,C语言中的gets()函数

    在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回.如果要读取一行字符串, 比如:I love MIT 这种情况,scanf() ...

  9. c语言 access编程,C语言中access/_access函数的使用实例详解

    在Linux下,access函数的声明在文件中,声明如下: int access(const char *pathname, int mode); access函数用来判断指定的文件或目录是否存在(F ...

  10. c语言使用free释放指针报错,C语言中的free函数用法执行机制分析

    free函数是C语言或者C++程序语言的常用函数,那么free函数有什么用途呢?free函数又怎么用呢?C语言中的free函数用法执行机制分析,一起来看看free内部的机制以及和delete的对比分析 ...

最新文章

  1. ArcGIS JS先添加动态图层,再添加切片图层后不显示
  2. Elasticsearch-映射
  3. SparkSQL之External Data
  4. (转)Linux设备驱动之HID驱动 源码分析
  5. html列表按时间排序代码_按字母顺序排序的列表
  6. Notepad++便签模式
  7. 科技英语翻译计算机化考试,2017年英语四级翻译范文之考公热
  8. php分页类示例下载,PHP 通用分页类的简单示例
  9. 领秀加速器软件介绍及功能介绍
  10. 项目:调用百度API实现图像识别
  11. 字符谜题之1:最后的笑声(之所以说是最后的笑声,是因为输出两个Ha,第二个出问题)
  12. NRF52832 SPI 资料收集
  13. window location href is not a function错误解决
  14. ps如何把自己的图与样机结合_如何用PS制作样机,并且看起来毫无痕迹
  15. 第32期:索引设计(索引设计详细规范)
  16. 论文的文献综述查重吗?
  17. 社交巨头facebook下的messenger推出一项新功能——可以确定你的实时位置信息
  18. 博客网站的选择兼开博通文
  19. Wi-Fi 网络结构
  20. 解决虚拟机中centos7中安装完毕后无法联网显示Server not found如何解决?

热门文章

  1. 嗯哼?!GitHub居然崩了?原因竟然是......
  2. [iOS]-NSTimer与循环引用的理解
  3. Mac上Pycharm激活
  4. Microsoft Edge打不开了怎么办
  5. 绝地求生按键指南-教程
  6. 什么是正能量?怎样做一位正能量的人?
  7. 日记:paddle paddle模型实现情绪识别
  8. HTML字体虚化怎么设置,CSS滤镜给字体加阴影、模糊、透明的方法
  9. 谢娜想换个热搜(上镜美不美,先看牙!)
  10. 浅议:客户关系管理的作用及实施