C语言参数传递
来源:互联网 发布:小米vr软件 编辑:程序博客网 时间:2024/05/01 11:21
今天午休的时候阅览今日头条,偶然看到一段c语言参数传递的一段代码,看了那段代码的运行结果,我有点疑惑,于是将那段代码测试了一下,发现结果真是那样子!废话不多说,贴上原代码:
#include<stdio.h>void add_by_10(int a){ a=a+10;}int main(int argc,char*argv[]){ int a=2; add_by_10(a); printf("a=%d\n",a);}****************************************************************************************************************************************************
说明:这段代码的功能本来是想将某整数加10,一开始我以为结果是12,后来自己测试一下发现结果是2,于是回顾了一下
以前学习的c语言传参的知识点,发现一些细节我居然早已忘记,于是赶紧总结一下,后来改了一下那段代码,结果输出为12
代码如下:
#include<stdio.h>void add_by_10(int* a){ int b=10; *a=*a+b;}int main(int argc ,char**argv){ int a=2; add_by_10(&a); printf("%d\n",a); return 0;}
运行结果如下:
[zoulei@CentOS procedure_test]$ vim ff.c
[zoulei@CentOS procedure_test]$ gcc ff.c
[zoulei@CentOS procedure_test]$ ./a.out
12
总结:C语言的参数传递有传值和传地址两种方式。
传值的过程:
(1)行参与实参各占一个独立的存储空间。
(2)行参的存储空间是函数被调用时才分配的。调用开始,系统为行参开辟一个临时
存储区,然后将各实参之值传递给行参,这时行参就得到了实参的值。
(3)函数返回时,临时存储区也被撤销。
传值的特点:单向传递,即函数中对行参变量的操作不会影响到调用函数中的实参变量,参数的值只能传入,不能传出。
当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
上面第一个程序就是值传递,而我修改过后的那段代码是地址传递!
传地址的特点:实参和行参共享一个存储单元,对行参的操作相应的就改变了实参,此时参数传递是双向的。
此外,参数的存储位置和变量的存储属性对参数传递也有影响,变量的存储属性有动态变量、静态变量
外部变量,动态变量有2种,自动(auto)和寄存器(register)变量
存储属性
register
auto
static
extern
存储位置
寄存器
主存
生存期
动态生存期
永久生存期
作用域
局部
局部或全局
全局
此外还应注意内存的分配方式,内存分配方式有三种:
(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的
整个运行期间都存在。例如全局变量,static 变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函
数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集
中,效率很高,但是分配的内存容量有限。
(3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意
多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存
期由我们决定,使用非常灵活,但问题也最多。
- c语言参数传递
- C语言参数传递
- C语言参数传递
- C语言参数传递
- C语言参数传递
- C语言参数传递
- C语言 参数传递
- C语言参数传递
- c语言传递参数
- C语言的参数传递
- C语言的参数传递
- C语言的参数传递
- C语言函数参数传递
- c语言参数传递问题
- c语言的参数传递
- c语言函数参数传递
- c语言参数传递方式
- C语言中的参数传递
- 中关村-DIY之国外网盘下载测试
- APUE.3e 安装(ubuntu 14.04LTS)
- 547. Friend Circles
- leetcode547. Friend Circles
- HDU 1232 畅通工程
- C语言参数传递
- HDU 2159 FATE 二维费用背包
- HDU 2153 JAVA
- 67. Add Binary
- 【MYSQL】0001_MYSQL的识别符
- mongoDB使用详解(在node中使用)
- android瘦身---干掉地图的jar包
- visual tracking代码测试
- 背个小背包