C语言函数参数的传值和传址调用

欢迎关注我的博客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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,470评论 3 44
  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,665评论 1 19
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,533评论 1 51
  • 我很难受,很尴尬,一定要让我那么尴尬吗?哥哥
    向阳而生sunflower阅读 164评论 0 1
  • 写在前面的话 我的职业是瑜伽。从2010年接触瑜伽至今。 我学习瑜伽是因为自己身体不大好,痔疮,便秘,结肠炎,腹胀...
    如水的月光_娟子阅读 763评论 0 3