C语言数组的地址传递和值传递

Python012

C语言数组的地址传递和值传递,第1张

1.值传递就不写了,顾名思义就是把当前的值传到下一个函数中,变量本身的没有发生任何变化

2.指针传递,把当前变量指针传到下一个函数,在另外函数里边修改指针的值会修改当前变量值

#include <stdio.h>

  void func(int *p){

                *p = 9

                return

    }

void swap(int *a, int *b){ //交换两个变量的值

        int temp = *a

        *a = *b

        *b = temp

}

int main(void){

            int a = 0

            func(&a)//要修改一个变量,把他的地址传过去

            printf("%d",a)//9

            int b = 3int c = 4

            swap(&b,&c)

            return 0

}

不能把数组的首地址赋给另一个数组。因为数组名是常量指针类型,初始化之后是不能够被修改的。

有两种办法实现类似功能,一种是创建指针变量,把地址直接赋值指针变量:

例如 int a[100]int *b=a

第二种就是直接用循环一一复制每个元素。

例如 for(i=0i<strlen(a)i++) b[i]=a[i]

如果是不是传地址,那会在函数中重新定义两个变量分别等于两个参数的值,对新定义的两个变量进行操作。和原来的两个变量无关。

如果是传地址,那就是把两个数的地址传到函数中,对两个地址中的内容进行操作。所以会改变两个数的值。

一般如果要通过函数来改变参数的值,C都是要用传地址的,C++还可以用引用。比如scanf()函数,因为要把输入的值传递给参数,所以要加取地址符号&.而printf就不用