C++指针、数组、引用、变量作函数参数的问题
5个回答
2012-08-01
展开全部
1, 变量作为参数,这是单向值传递。即将数据传给被调函数后,与调用函数就不相关了,必须通过函数值返回操作结果。
如有函数声明:void swap(int a,int b); //功能是交换a,b值,但事实上对调用函数没有影响,因为swap函数的局部变量a,b在该函数执行完释放掉了,其值也就丢失了。
2. 指针、数组作为参数,这是地址传递,指针和数组可以看成是指向一个或一片连续空间的指针(区别是:一个为变量地址,一个常量地址),它们传递的是所指数据或数据区的地址,这使得函数直接操作的就是原数据区的数据。好处是可以直接通过函数改变调用函数中的多个数据。
如有函数声明:void swap(int *a,int *b); 传递是指向所指空间的地址,执行后,直接交换了调用函数中的数据;
再如: void max(int a[],n),求数组a中的最大值。也是传递数组的地址,操作的是调用函数的数组元素。
3.引用作为参数,引用就是别名,其实也是地址传递,但它是常量地址
如有函数声明:void swap(int a,int b); //功能是交换a,b值,但事实上对调用函数没有影响,因为swap函数的局部变量a,b在该函数执行完释放掉了,其值也就丢失了。
2. 指针、数组作为参数,这是地址传递,指针和数组可以看成是指向一个或一片连续空间的指针(区别是:一个为变量地址,一个常量地址),它们传递的是所指数据或数据区的地址,这使得函数直接操作的就是原数据区的数据。好处是可以直接通过函数改变调用函数中的多个数据。
如有函数声明:void swap(int *a,int *b); 传递是指向所指空间的地址,执行后,直接交换了调用函数中的数据;
再如: void max(int a[],n),求数组a中的最大值。也是传递数组的地址,操作的是调用函数的数组元素。
3.引用作为参数,引用就是别名,其实也是地址传递,但它是常量地址
展开全部
指针是一个变量,变量里面存储了一个地址。
数组的本质是一个指针,该指针指向一段连续内存的首地址。
C语言本身没有引用,但可以用指针操作来实现。
假设int a = 1; int b = a;这样的是赋值操作 b 的值被福成了a的值,a和b是独立的变量
但 int a = 1; int *p = &a;这样的话&a 和 p指向通一个内存,那么a的值 发生变化的时候 *p也会发生变化,这就起到了引用的作用。
那么我们可以了解到指针,数组,引用其实都是指针。
那么指针做参数和普通变量做参数有什么区别呢。
其实不管是指针还是变量,在作为函数参数时都是值传递的。
比如函数
int foo(int i) {
i = 8;
}
int i = 1;
foo(i);
上面这段代码执行完成后 i 的值并不会变化,这是因为调用foo函数时只是把i的值1传给函数,而不是把变量传给函数。
再来看看地址的情况
int foo(int *p) {
p = (int *)malloc(sizeof(int));
}
int* i = null;
foo(i);
上面这段代码执行后 i依然是空指针,道理和前面是一样的。
但是指针在作为函数参数时有特殊的用途。
int foo(int *p) {
*p = 5;
}
int i = 1;
foo(&i);
上面这个代码执行后i的值将会变成1,这是为什么呢。因为调用函数时,将i的地址值传给了函数,在函数中操作地址所指向的内存块,这样就是操作i的值。
数组的本质是一个指针,该指针指向一段连续内存的首地址。
C语言本身没有引用,但可以用指针操作来实现。
假设int a = 1; int b = a;这样的是赋值操作 b 的值被福成了a的值,a和b是独立的变量
但 int a = 1; int *p = &a;这样的话&a 和 p指向通一个内存,那么a的值 发生变化的时候 *p也会发生变化,这就起到了引用的作用。
那么我们可以了解到指针,数组,引用其实都是指针。
那么指针做参数和普通变量做参数有什么区别呢。
其实不管是指针还是变量,在作为函数参数时都是值传递的。
比如函数
int foo(int i) {
i = 8;
}
int i = 1;
foo(i);
上面这段代码执行完成后 i 的值并不会变化,这是因为调用foo函数时只是把i的值1传给函数,而不是把变量传给函数。
再来看看地址的情况
int foo(int *p) {
p = (int *)malloc(sizeof(int));
}
int* i = null;
foo(i);
上面这段代码执行后 i依然是空指针,道理和前面是一样的。
但是指针在作为函数参数时有特殊的用途。
int foo(int *p) {
*p = 5;
}
int i = 1;
foo(&i);
上面这个代码执行后i的值将会变成1,这是为什么呢。因为调用函数时,将i的地址值传给了函数,在函数中操作地址所指向的内存块,这样就是操作i的值。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按深浅顺序
变量做参数,一般都是用全局变量或者局部变量,然后通过赋值和调用来使用,可储存各种信息,但是信息量不会很大,这得看变量类型.
引用具体引用什么我不清楚,估计你的意思是引用全局变量?
数组是一种按有序地址存储无序信息的方式,做函数参数的时候多是循环调用,解决迭代回溯之类的函数较好用,关键就在数组名称对应的地址信息.
指针就比较大了,这个概念建议你看书,简单说C++的精髓就是这个指针,指针可以指向地址,也可以直接调用指针对应内容,特点就是改变指针的时候不改变指针地址所储存的内容,函数调用时指针是最好的调用方式,当然要按具体情况选择.
总的来说C++的函数调用主要是调用类库中的函数,通过接口传入类定义的类型的数据,返回值或过程.具体调用的方式以上几种都可以,都有相对方便的时候,比如小函数如计算什么的,用个局部变量就够了,而迭代算法用数组就很方便,而不想改变存储过程的时候用指针就很实用了.
希望对你有帮助!
变量做参数,一般都是用全局变量或者局部变量,然后通过赋值和调用来使用,可储存各种信息,但是信息量不会很大,这得看变量类型.
引用具体引用什么我不清楚,估计你的意思是引用全局变量?
数组是一种按有序地址存储无序信息的方式,做函数参数的时候多是循环调用,解决迭代回溯之类的函数较好用,关键就在数组名称对应的地址信息.
指针就比较大了,这个概念建议你看书,简单说C++的精髓就是这个指针,指针可以指向地址,也可以直接调用指针对应内容,特点就是改变指针的时候不改变指针地址所储存的内容,函数调用时指针是最好的调用方式,当然要按具体情况选择.
总的来说C++的函数调用主要是调用类库中的函数,通过接口传入类定义的类型的数据,返回值或过程.具体调用的方式以上几种都可以,都有相对方便的时候,比如小函数如计算什么的,用个局部变量就够了,而迭代算法用数组就很方便,而不想改变存储过程的时候用指针就很实用了.
希望对你有帮助!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针和引用的作用类似,都可以改变实参,但实质不一样,某些情况下的用法不一样。
它们只是传递参数的两种方式。
而数组和其它变量则作为参数被传递。
再说,这什么问题嘛,多用一下,就知道差异了。
我们老师说,编程不光是看书,而是要有自己的理解!
它们只是传递参数的两种方式。
而数组和其它变量则作为参数被传递。
再说,这什么问题嘛,多用一下,就知道差异了。
我们老师说,编程不光是看书,而是要有自己的理解!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
具体问题具体分析
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询