c 数组和指针在函数参数中的转换
来源:互联网 发布:淘宝买手机卡可靠吗 编辑:程序博客网 时间:2024/05/24 08:34
相信刚接触c的人会认为,指针和数组是互换,但是很明显不是这样子的。之前曾经详细的罗列了数组和指针的区别。这里就不再详述了。
以下是一段示例程序,将帮助你理解数组在传递到函数参数中时发生的变化:
#include "stdio.h"
char g_a[] = "abcdefghi";
//session 1:参数使用数组
//由于编译器都会将形参中的数组转换成指针,所以打印出的地址是形参指针的地址
//其实也就是一个局部变量
void my_array_func(char ca[]){
printf(" addr of array param = %p /n", &ca);
printf(" addr (ca[0]) = %p /n", &(ca[0]));
printf(" addr (ca[1]) = %p /n", &(ca[1]));
printf(" ++ca = %p /n/n", ++ca);
return ;
}
//session 2:参数使用指针
//所以打印出的地址就是局部变量指针的地址
//指针所指向的正是实参数组的第一个元素
void my_point_func(char *p_a){
printf(" addr of ptr param = %p /n", &p_a);
printf(" addr (p_a[0]) = %p /n", &(p_a[0]));
printf(" addr (p_a[1]) = %p /n", &(p_a[1]));
printf(" ++p_a = %p /n/n", ++p_a);
return ;
}
int main(int argc, char* argv[])
{
//直接打印出数组的地址
//因为没有经过函数调用,所以不会被转换成指针
//所以打印出的是数组本身的地址
printf("Hello World!/n");
printf(" addr of global array = %p /n", &g_a);
printf(" addr (g_a[0]) = %p /n", &(g_a[0]));
printf(" addr (g_a[1]) = %p /n/n", &(g_a[1]));
my_array_func(g_a);
my_point_func(g_a);
//conclusion :函数中形参无论是定义为数组还是指针,最终都会转化成指针
//且指针所指向的正是实参数组的第一个元素
//而在未经过函数调用的,并不会出现这种编译器的转换
//这也是为什么无法在函数内部调用sizeof计算出数组长度的原因
//当然,我们很庆幸发现了这点。
return 0;
}
- c 数组和指针在函数参数中的转换
- 数组和指针参数在函数形参中的表示
- C 指针和数组及函数参数
- 35-函数参数中的(数组参数和指针参数)
- C中的数组作函数参数被译为指针
- 指针转换 和 指针在函数迭代中的传递
- C指针笔记--函数中的参数指针
- C语言中的指针,数组,指针数组, 数组形式参数
- 指针和数组在函数中的传递实例
- C中的指针和数组
- C中的指针和数组
- C中的数组和指针
- C语言中的指针(指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针)
- 指针数组、数组指针、函数指针和堆中的分配原则
- NDK开发学习之C学习基础篇-1(指针,数组于指针,指针和函数参数,二级指针)
- 指针数组 和 数组指针分析 main函数的参数
- 二维数组指针和函数参数
- 数组和指针做函数参数传递
- Drawable、Bitmap、byte[]之间的转换
- OMS和EMS的区别
- 屏幕上输出变量
- Flex元数据标签-总结
- Accessing Standard and Dynamic MBeans via the RMI Connector
- c 数组和指针在函数参数中的转换
- kscope安装脚本
- 线程中使用UpdateData出错解决方法
- Oracle左(右)连接
- 编程之美读书笔记_1.1_让CPU占用率曲线听你指挥
- 2 December 2010 Thursday
- GridView的DataKeyNames属性
- 解决:android Listview 拖动时背景为黑色问题
- [活动]TECH ED2010归来