C语言函数的参数使用指针

 更新时间:2021年06月28日 10:29:45   作者:it小白求知路  
这篇文章主要介绍了C语言函数的参数使用指针,本文讲述了指针在作为函数参数时候的使用方法,解析值传递和值引用的区别案例,希望对你有所帮助

在c语言中实参和形参之间的数据传输是单向的“值传递”方式,也就是实参可以影响形参,而形参不能影响实参。指针变量作为参数也不例外,但是可以改变实参指针变量所指向的变量的值。

#include <stdio.h>
void swap1(int x,int y),swap2(int *px,int *py),swap3(int *px,int *py);
int main(void)
{
	int a=1,b=2;
	int *pa=&a,*pb=&b;
	swap1(a,b);
	printf("s1:a=%d,b=%d\n",a,b);
 
	a=1,b=2;
	swap2(pa,pb);
	printf("s2:a=%d,b=%d\n",a,b);
 
	a=1,b=2;
	swap3(pa,pb);
	printf("s3:a=%d,b=%d\n",a,b);
	
	return 0;
}
void swap1(int x,int y){
	int t;
	t=x;
	x=y;
	y=t;
}
 
void swap2(int *px,int *py){
	int t;
	t=*px;
	*px=*py;
	*py=t;
}
 
void swap3(int *px,int *py){
	int *pt;
	pt=px;
	px=py;
	py=pt;
}

结果:

第一个swap1函数运行结果是:x=2   y=1.但是第一个函数的形参是(int x,int y),实参是(int a,int b)。因为实参可以影响形参,而形参不可以影响实参。所以a,b的值是不变的。如图:

             

第二个swap2函数由图可知,pa和px都是a的地址,pb和py都是b的地址。此函数改变*px,*py的值。因为*px和a在同一储存单元,*py和b在同一储存单元。以改变实参指针变量所指向的变量的值。所以如图*pa和*pb的值也改变了,最后输出结果也就改变了。

第三个swap3同样的道理,如上图直接改变了形参指针px和py的值,改变的只是地址,地址所对应的值没有改变,又因为形参是不会影响实参,所以pa和pb没有改变。所以a,b值没有改变。

到此这篇关于C语言函数的参数使用指针的文章就介绍到这了,更多相关C语言函数参数指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言进阶:指针的进阶(2)

    C语言进阶:指针的进阶(2)

    这篇文章主要介绍了C语言指针详解及用法示例,介绍了其相关概念,然后分享了几种用法,具有一定参考价值。需要的朋友可以了解下
    2021-09-09
  • C++类与对象深入之运算符重载与const及初始化列表详解

    C++类与对象深入之运算符重载与const及初始化列表详解

    运算符是程序中最最常见的操作,例如对于内置类型的赋值我们直接使用=赋值即可,因为这些编译器已经帮我们做好了,但是对象的赋值呢?能直接赋值吗
    2022-06-06
  • 详解C语言进程同步机制

    详解C语言进程同步机制

    这篇文章主要介绍了详解C语言进程同步机制的的相关资料,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C++使用初始化列表的方式来初始化字段的方法

    C++使用初始化列表的方式来初始化字段的方法

    今天小编就为大家分享一篇关于C++使用初始化列表的方式来初始化字段的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • C++动态规划之最长公子序列实例

    C++动态规划之最长公子序列实例

    这篇文章主要介绍了C++动态规划之最长公子序列,实例分析了C++求最长公子序列的相关技巧,是C++字符串操作的一个典型应用,需要的朋友可以参考下
    2015-04-04
  • c++中map容器的使用详解

    c++中map容器的使用详解

    这篇文章主要介绍了c++中map容器的使用详解,C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值,需要的朋友可以参考下
    2023-08-08
  • 深入浅出分析C++ string底层原理

    深入浅出分析C++ string底层原理

    C ++的string对象实质上就是一个容器,其内部有一个c_str方法能够返回一个指向的实质存储字符串副本的数据成员。即通过string::c_str()配合printf函数可以获取的字符串副本的内存地址
    2021-11-11
  • VC++文件监控之FindFirstChangeNotification

    VC++文件监控之FindFirstChangeNotification

    因为ReadDirectoryChangesW 上次测试发现不能多级目录监控,所以尝试用FindFirstChangeNotification来实施文件监控,需要的朋友可以参考下
    2019-04-04
  • c语言中数组名a和&a详细介绍

    c语言中数组名a和&a详细介绍

    其实这两个东西挺难理解的,应该也没有那么重要,了解一下好了,主要还是要多多理解数组指针的运算
    2013-08-08
  • Linux环境下段错误的产生原因及调试方法小结

    Linux环境下段错误的产生原因及调试方法小结

    借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决
    2011-11-11

最新评论