C语言中实参和形参问题&&函数使用数组作为参数的问题
2017-02-28 20:40
731 查看
引例:
void f(int a) {
a = 3;
}
int main() {
int b = 2;
f(b);
}
例子中:a是形参,b是实参
传递过程&&内存情况:
在被调用前,函数的形参是不分配内存的,也就是说,不调用f()的话,a不在内存里面
一旦调用了函数,马上为函数的形参分配内存,此时分配一个int空间大小的内存给a,此时,a和b在内存中都有内存(不同的内存),传参的时候,程序传递实参的值给形参
所以:在f函数内部改变参数的值,只改变了形参的值,形参在函数结束后被释放,main里面的b值不变
当形参是数组的时候:
void f(int a[]) {
a[2] = 3;
}
int main() {
int b [5] = {1,1,1,1,1};
f(b);
}
此时情况有变,实际上这种情况下实参传递的是数组的首地址,那么一旦调用函数的时候,内存里会存在两个指针变量(一个形参一个实参),这两个变量指向同一位置,当然,函数内改变形参的值不会使得main里的实参地址发生变化,但是,由于两个参数指向同一位置,所以,通过形参来改变数组元素的值之后,main里面的实参在去访问数组的时候,数组的值已经改变
&和*的区别:
例子: int a;int *b = &a;
&符号用来处理一个变量,但不是通常的-访问这个变量的内容,而是取出这个变量的地址
int *b;此时b是一个指向int空间的指针,也就是说它是一个未分配的地址
int*只用来定义,定义的变量是一个地址(索引),可以通过这个变量来对这段空间操作
而&是对一个已存在的变量取地址,取完地址之后同样可以通过地址操作
*x是找到x地址的变量,取它的值,所以*和&是反操作,&x得到x的地址*,*x得到x的值x
void f(int a) {
a = 3;
}
int main() {
int b = 2;
f(b);
}
例子中:a是形参,b是实参
传递过程&&内存情况:
在被调用前,函数的形参是不分配内存的,也就是说,不调用f()的话,a不在内存里面
一旦调用了函数,马上为函数的形参分配内存,此时分配一个int空间大小的内存给a,此时,a和b在内存中都有内存(不同的内存),传参的时候,程序传递实参的值给形参
所以:在f函数内部改变参数的值,只改变了形参的值,形参在函数结束后被释放,main里面的b值不变
当形参是数组的时候:
void f(int a[]) {
a[2] = 3;
}
int main() {
int b [5] = {1,1,1,1,1};
f(b);
}
此时情况有变,实际上这种情况下实参传递的是数组的首地址,那么一旦调用函数的时候,内存里会存在两个指针变量(一个形参一个实参),这两个变量指向同一位置,当然,函数内改变形参的值不会使得main里的实参地址发生变化,但是,由于两个参数指向同一位置,所以,通过形参来改变数组元素的值之后,main里面的实参在去访问数组的时候,数组的值已经改变
&和*的区别:
例子: int a;int *b = &a;
&符号用来处理一个变量,但不是通常的-访问这个变量的内容,而是取出这个变量的地址
int *b;此时b是一个指向int空间的指针,也就是说它是一个未分配的地址
int*只用来定义,定义的变量是一个地址(索引),可以通过这个变量来对这段空间操作
而&是对一个已存在的变量取地址,取完地址之后同样可以通过地址操作
*x是找到x地址的变量,取它的值,所以*和&是反操作,&x得到x的地址*,*x得到x的值x
相关文章推荐
- 指针数组作为函数参数的使用问题
- 如果改变了形参数组的值 从而在调用函数期间 形参数组就和实参数组共占同一段内存单元 为什么形参数组从实参数组那里得到起始地址后 请问各位C语言高手:当用数组名作函数参数时 也就该变了实参数组的值
- 实例解析使用指针作为函数参数传递需要注意的问题
- C语言基础知识之(十二):结构体作为函数的参数(结构体变量、结构体数组)
- 关于 Numpy 数组作为函数参数的一个小问题
- 指针变量作为函数参数使用时注意的问题!
- C 语言的数组作为参数在函数之间的传递
- C/C++面试题--数组作为函数参数的几个问题
- 《IOS_作业C语言》高级指针(结构体指针、结构体数组指针、结构体数组指针,作为函数的参数使用、预编译指令)
- C语言中数组作为函数参数的问题
- 数组作为函数形参时应注意的问题
- C++用指针变量作为函数的参数接受数组的值的问题的总结
- C99中变长数组作为函数形参的问题
- 关于C语言中一,二级指针函数中的使用和c语言中和函数发生调用时,实参和形参都会占用内存吗?
- QT 自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题
- JS函数的参数(arguments)的使用(形参和实参)
- 作为函数参数的多维数组想到的两个问题
- C++用指针变量作为函数的参数接受数组的值的问题的总结
- 巩固:数组作为函数参数& 指针作为函数参数的用法
- 关于指针作为函数参数传递的理解,对比普通变量作为函数参数的需注意点,其实就是行参和实参的问题。