c语言传入数组

今天在写一个编辑二进制文件的程序时回想到了这个知识点,就是函数某个函数内使用并改变其他函数的变量。本来是可以用全局变量的方式快速解决的,但还是觉得全局变量能不用尽量不用,养个好习惯。

我比较习惯用这两种写法来传变量给函数:

1)最简单的,直接传进来这个变量,但无法更改原来的变量本身,因为函数运行完其内存就清掉了

void CaoZuo(int i)
{
  i -= 2;
  printf("%d", i); // A处
}


int main()
{
  int i;     
  CaoZuo(i); 
  printf("%d", i);// B处
}

比如主函数内i为5,那么A处是3但B处还是5

2)但是如果传入的是原先变量的地址就不一样了,因为主函数只运行到一半所以内存不会清掉,在CaoZuo函数内改变地址里的值是可行的

void CaoZuo(int *i)
{
  *i -= 2;
  printf("%d", *i); // A处
}


int main()
{
  int i;     
  CaoZuo(&i); 
  printf("%d", i);// B处
}

这里传入CaoZuo函数的是主函数中i的地址,在函数内是对地址存储的值来操作,这样A处和B处都会是3

这两个方法都是实用的,要看子函数内是只需要知道变量是多少还是要改变变量本身

有点小意思了,我们接下来看数组的传入:

int main()
{
  int a[5] = {'2', '3', '6', '4', '9'};
  BuGaiBian(a);
  printf("%d", a[1]); // A处
  Gaibian(a);
  printf("%d", a[1]); // B处
}

void BuGaiBian(int arr[])
{
  arr[1] = 5;
}

void GaiBian(int *arr)
{
  arr[1] = 5;
}

A处仍然是3,B处就是5了

posted @ 2021-01-22 15:29  Kotoyou  阅读(856)  评论(1)    收藏  举报