欢迎关注我的博客Zhuhao's Blog获取最新文章
大家都知道,c语言一般的参数都是传值调用的,但有时候也有例外,下面就分析一下什么时候传值调用,什么时候传址调用。
传值调用
标量参数都是传值调用,不会对标量产生任何影响
#include <stdio.h>
void add_one(int value) {
value += 1;
}
int main(int argc, char const *argv[]) {
int value = 10;
printf("传值前value=%d\n", value);
add_one(value);
printf("传值后value=%d\n", value);
return 0;
}
运行结果:
传值前value=10
传值后value=10
Process returned 0 (0x0) execution time : 0.110 s
Press any key to continue.
传址调用
数组和指针参数是传址调用,相当于传递了一个包含参数地址的指针,在函数中对数组或指针的任何操作会间接的改变数组和指针的本身
#include <stdio.h>
#define SIZE 4
void clr_nums(int nums[], int size) {
int i;
for (i = 0; i < size; i++) {
nums[i] = 0;
}
}
void clr_string(int *string) {
*string = " ";
}
int main(int argc, char const *argv[]) {
int nums[] = {1,2,3,4};
int *string = "Hello";
int i;
printf("传址前\n");
printf("nums= ");
for (i = 0; i < SIZE; i++) {
printf("%d ", nums[i]);
}
printf("string=%s\n", string);
clr_nums(nums, SIZE);
clr_string(&string);
printf("传址后\n");
printf("nums= ");
for (i = 0; i < SIZE; i++) {
printf("%d ", nums[i]);
}
printf("string=%s\n", string);
return 0;
}
运行结果:
传址前
nums= 1 2 3 4 string=Hello
传址后
nums= 0 0 0 0 string=
Process returned 0 (0x0) execution time : 0.111 s
Press any key to continue.