数组名作为函数参数以及sizeof用法
2016-06-23 17:41
417 查看
int f(int *p,char *a) { printf("p[2]=%d,*(p+2)=%d\n",p[2],*(p+2)); printf("a[2]=%c,*(a+2)=%c\n",a[2],*(a+2)); printf("sizeof(p)=%d\n",sizeof(p)); printf("sizeof(a)=%d\n",sizeof(a)); return 0; } int main() { int p[5]={0,1,2,3,4}; char a[9]={'0','1','2','3','4','1','2','3','4'}; printf("sizeof(p)=%d\n",sizeof(p)); printf("sizeof(a)=%d\n",sizeof(a)); f(p,a); return 0; }
输出结果为:
<
4000
pre class="prettyprint">
sizeof(p)=20 //5*4 int占四个字节 sizeof(a)=9 //char占1个字节 p[2]=2,*(p+2)=2 a[2]=2,*(p+2)=2 sizeof(p)=4 //指针占4个字节 sizeof(a)=4 //指针占4个字节
在《C陷阱和缺陷》中有两句话:
1.如果我们使用数组名作为函数参数,那么数组名会立刻转换为指向该数组第一个元素的指针。C语言会自动的降作为参数的数组声明转换为相应的指针声明。
2.除了a被用作运算符sizeof的参数这一情形,在其他所有的情形中数组名a都代表指向数组a中下标为0的元素的指针。
相关文章推荐
- C#中sizeof的用法实例分析
- 浅析C语言中的sizeof
- 深入sizeof的使用详解
- C语言中的sizeof操作符用法及和strlen的区别
- sizeof()的简单介绍
- C语言中sizeof()与strlen()函数的使用入门及对比
- 基于Sizeof与Strlen的区别以及联系的使用详解
- 浅析C/C++中被人误解的SIZEOF
- 解决不用sizeof求出int大小的方法
- C++ sizeof 实例解析
- C语言中关于sizeof 和 strlen的区别分析
- 对C语言中sizeof细节的三点分析介绍
- 关于操作系统各种数据类型的内存分配的一点探讨
- Sizeof与Strlen的区别与联系
- sizeof使用
- C语法陷阱:理解如何声明一个数组
- sizeof,strlen
- sizeof(struct)内存分配分析
- sizeof(struct)分析(包括union)
- 第三天学习笔记