栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

函数中的指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

函数中的指针

1 取数组元素

a[i]等价于*(a+i)   *表示间接引用,也就是(a+i)这个空间里对应的值

2 调用函数时的传值和传址(指针做函数参数,调用该函数时,传有效的地址值)

  1 #include 
  2 void swap(int a, int b) //值传递
  3 {
  4     int tmp = a;
  5     a = b;
  6     b = tmp;
  7     printf("a=%d b=%dn", a, b);
  8 }
  9 
 10 void swap2(int *a, int *b)  //址传递
 11 {
 12     int tmp = *a;
 13     *a = *b;
 14     *b = tmp;
 15     printf("*a=%d *b=%dn", *a, *b);
 16 }
 17 
 18 int main(void)
 19 {
 20     int m = 10, n = 20;
 21     printf("值传递交换前m=%d, n=%dn", m, n);
 22     swap(m, n);
 23     printf("值传递交换后m=%d, n=%dn", m, n);
 24     printf("址传递交换前m=%d, n=%dn", m, n);
 25     swap2(&m, &n);
 26     printf("址传递交换后m=%d, n=%dn", m, n);
 27     return 0;
 28 }

运行结果:

结论:

传值只会改变形参的值不会改变实参的值;

传址形参和实参的值都会改变,通过改写该地址的内容而改变实参的值。

3  数组做函数参数

 18 //void array(int a[])
 19 void array(int *a)
 20 {
 21     printf("array: sizeof(a)=%lun", sizeof(a));
 22     printf("a[0]=%dn", a[0]);
 23 }
 24 
 25 int main(void)
 26 {
 27     int a[] = {10, 21, 52, 532, 13};
 28     printf("main: sizeof(a)=%lun", sizeof(a));
 29     array(a);
 30     return 0;
 31 }

运行结果:

结论:

数组做函数参数时,传递的是该数组的指针,指针在64位系统下的大小是8,32位系统下的大小是4。

4 指针做函数返回值

int *test(int a, int b);

指针做函数返回值,不能返回【局部变量的地址值】。

5 数组做函数的返回值:

C语言不允许,只能写成指针形式。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316415.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号