C语言参数传递


 1 //--------------------单向值传递------------------------
2
3 // swap这个方法在被调用时,给形参a,b分配了空间
4 // 主调函数将【数值】传递给【形参】
5 // 形参完成操作之后并不能将值传回给主调函数
6 // 形参的生命周期仅仅在方法体中
7 /* void swap(int a , int b)
8 {
9 int tmp = a;
10 a = b;
11 b = tmp;
12 }*/
13 //-----------------------验证程序------------------------
14 /*
15 int x(6) , y(7);
16 cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
17 cout << "交换值以前的值:x=" << x << "y=" << y << endl;
18 swap(x , y);
19 cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
20 cout << "交换值以后的值:x=" << x << "y=" << y << endl;
21 */
22 //-------------------------------------------------------
23
24 //--------------------单向值(指针)传递------------------------
25 // 同值传递是一个道理
26 // 传进来的指针变量被形参接收
27 // 形参在执行完方法之后无法传回主调函数中
28 //void swap(int *a , int *b)
29 //{
30 // int *tmp = a;
31 // a = b;
32 // b = tmp;
33 //}
34 //-----------------------验证程序------------------------
35 /*
36 int x(6) , y(7);
37 cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
38 cout << "交换值以前的值:x=" << x << "y=" << y << endl;
39 swap(&x , &y);
40 cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
41 cout << "交换值以后的值:x=" << x << "y=" << y << endl;
42 */
43 //-------------------------------------------------------
44
45 //--------------------地 址 传 递------------------------
46
47 // 形参接收到了主调函数传递的参数
48 // 形参a将主调函数传递过来的【指针变量】指向的【内存地址】的【数值】赋予被调函数中的临时变量tmp
49 // 形参b将【指针变量】指向的【内存空间】中的【数值】赋予形参a存储的【指针变量】指向的【内存空间】
50 // 临时变量tmp将【数值】赋予形参b存储的【指针变量】指向的【内存空间】
51 // 因为是【直接】对【指针变量】指向的【内存空间】中的【数值】进行修改,所以达到了所谓的双向传值
52 //void swap(int *a , int *b)
53 //{
54 // int tmp = *a;
55 // *a = *b;
56 // *b = tmp;
57 //}
58 //-----------------------验证程序------------------------
59 /*
60 int x(6) , y(7);
61 cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
62 cout << "交换值以前的值:x=" << x << "y=" << y << endl;
63 swap(&x , &y);
64 cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
65 cout << "交换值以后的值:x=" << x << "y=" << y << endl;
66 */
67 //-------------------------------------------------------
68
69 //---------------动态分配内存空间实现值交换----------------
70 // 定义俩指针变量x,y
71 // 分别对他们进行动态分配内存空间
72 // x , y 仅为1字节的指针变量,指向了两个分配好的空间上
73 // 将x,y的值进行互换者达到了交换值的效果
74 /*
75 int* x ,* y;
76
77 x = (int*)malloc(sizeof(int));
78 y = (int*)malloc(sizeof(int));
79
80 *x = 6;
81 *y = 7;
82
83 cout << "交换值以前的地址:x=" << x << "y=" << y << endl;
84 cout << "交换值以前的值:x=" << *x << "y=" << *y << endl;
85
86 int *tmp;
87 tmp = x;
88 x = y;
89 y = tmp;
90
91 cout << "交换值以后的地址:x=" << x << "y=" << y << endl;
92 cout << "交换值以后的值:x=" << *x << "y=" << *y << endl;
93 */

还有一点没弄明白就是如下代码在【静态分配内存】的时候为什么不能用改变【内存空间】的【地址】来达到【数值】交换的效果???!!!

看官有和妙解请不吝赐教..


 1 //--------------------单向值(指针)传递------------------------
2 // 同值传递是一个道理
3 // 传进来的指针变量被形参接收
4 // 形参在执行完方法之后无法传回主调函数中
5 //void swap(int *a , int *b)
6 //{
7 // int *tmp = a;
8 // a = b;
9 // b = tmp;
10 //}
11 //-----------------------验证程序------------------------
12 /*
13 int x(6) , y(7);
14 cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
15 cout << "交换值以前的值:x=" << x << "y=" << y << endl;
16 swap(&x , &y);
17 cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
18 cout << "交换值以后的值:x=" << x << "y=" << y << endl;
19 */
20 //-------------------------------------------------------

C语言参数传递,布布扣,bubuko.com

时间: 2024-12-28 08:49:36

C语言参数传递的相关文章

C语言参数传递(值传递、地址传递)+二级指针

参数传递 C语言参数传递一般分为:值传递和地址传递 (注意:C语言中没有引用传递,C++才有引用传递,因为很多C语言环境是用C++编译器编译,使得C看起来支持引用传递,导致很多网上很多blog都把引用传递归为C语言参数传递的一类, 当使用Microsoft Visual C++ 2010 Express或VC6之类的编译器时使用引用传递就无法编译通过) 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单向的(实参->形参) 1 #include <

C语言参数传递——实参与形参

在C语言中,关于形参与实参说明如下. 1) 形参是变量,但是函数被调用时才被分配内存.当函数执行完毕返回时,形参占用的内存空间又被释放. 2)实参可以是变量.常量和表达式,但实参必须有确定的值. 3)形参和实参的类型必须一致. 4)对应的实参和形参是两个独立实体,它们之间只有单向的值的传递,即实参的值传递给形参.形参的值在函数中不论怎么改变,都不会影响实参. 以上来自 C语言程序设计(第三版)/杨路明主编 个人观点:虽然在C语言中形参实参按值传递,但是按形参实参类型又可分为:值类型(数值类型.c

C/C++语言参数传递----函数/方法 参数的指针引用传递

int m_value = 1; void func(int *p) { p = &m_value; } int main(int argc, char *argv[]) { int n = 2; int *pn = &n; cout << *pn << endl; func(pn); cout << *pn <<endl; return 0; } 看一下输出结果 22 -------其实上面这些例子,看一百次,我个人觉得,也看不出实际意义

C语言之参数传递

学了四年的计算机,一直让自己比较苦恼的问题是C语言的参数传递问题,之所以说是苦恼,是因为在某年的一个学期,不幸接触到数据结构,光一个链表就把自己弄得死去活来的,而且自已一直就楞以为在操作的过程中,传递参数的指针也在发生变化,结果可想而知,数据结构成了自己专业课里面险些挂彩的一门课程. 直至最近,拿出数据结构打算恶补一下前些年欠下的债,第一件事情,还是先解决好当时困扰自己半年之久的C语言参数传递问题吧. C语言课堂上,自己明明记得参数传递问题我已经搞懂了,只不过当时没有接触过C plus plus

参数传递问题

一直没有好好研究C语言参数传递,只是从书上看,知道有传值和传地址两种方式,有时候一知半解真的不行,看似懂了,遇到问题后就乱了手脚,他们内部发生什么变化并不清楚,现在写下来.C语言的参数传递有传值和传地址两种方式.传值的过程:(1)行参与实参各占一个独立的存储空间.(2)行参的存储空间是函数被调用时才分配的.调用开始,系统为行参开辟一个临时存储区,然后将各实参之值传递给行参,这时行参就得到了实参的值.(3)函数返回时,临时存储区也被撤销.传值的特点:单向传递,即函数中对行参变量的操作不会影响到调用

c语言参数传递方式

今天在写栈碰到 了一个问题关于c语言参数传递的让我郁闷了半天 我只发现了两个问题一个 实参sum(a,b) 形参sum(int a,int b)或者sum(int &a,int &b) 实参sum(&a,&b) 形参sum(int *a,int *b) 这个就是c函数传地址与传引用传值!

c语言 可变参数传递 va_list使用

通过使用VA_LIST可以实现向函数传递不同数目的参数. #include <stdarg.h> #include <iostream> #include <string> using namespace std; #pragma argsused //函数A 传递若干个整形变量 void Funca(int n,...) {  //定义获取变量的结构体  va_list va_ptr;  //开始从头部开始获取变量  va_start(va_ptr,n);  for(

go语言:函数参数传递详解

参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程.比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数. 1.常规传递 使用普通变量作为函数参数的时候,在传递参数时只是对变量值得拷贝,即将实参的值复制给变参,当函数对变参进行处理时,并不会影响原来实参的值. 例如: package main import ( "fmt" ) func swap(a int, b int) { var temp int temp =

C语言的参数传递

一.三道考题 开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行--唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, int y){   int tmp;   tmp = x;   x = y;   y = tmp;   printf("x = %d, y = %d\n", x, y);}main(){   int a = 4,b = 6;   Exchg1(a, b);   printf("a = %d, b = %d\n"