指针和数组参数
来源:互联网 发布:六安2016消费数据图片 编辑:程序博客网 时间:2024/04/19 12:38
作为函数参数的数组名和指针是相等的。之所以要把传递给函数的数组参数转换为指针是出于效率的考虑。在c语言中,所有非数组形式的数据实参均以传值形式调用。然而,不过拷贝整个数组,无论在时间还是在内存上的开销都有可能非常大。而且绝大部分情况下,你其实并不需要整个数组的拷贝,你只想告诉函数在那一时刻对那个特定的数组元素感兴趣。
需要牢记的一点是数组名表示数组的第一个元素的地址,它是一个指针常量,所以不能被作为左值。在不能用左值的地方不能使用数组名。
数组初始化的问题:如果数组的长度比你提供的初始化的值的个数要多,剩余的几个元素会被自动设置为0.如果元素的类型是指针,那么它们会被初始化为NULL;如果元素类型是float,那么它们会被初始化为0.0。
下面是指针和数组作为参数的测试程序:
#include <stdio.h>#include <stdlib.h>char ga[]="abcdefghijklmn";void my_array_func(char ca[10]){printf("address of array param=%#x \n",&ca);printf("value of array param=%#x \n",ca);printf("address of ca[0]=%#x \n",&ca[0]);printf("address of ca[1]=%#x \n",&ca[1]);printf("++ca=%#x\n\n",++ca);}void my_point_func(char *pa){printf("address of ptr param=%#x \n",&pa);printf("value of point param=%#x \n",pa);printf("address of pa[0]=%#x \n",&pa[0]);printf("address of pa[1]=%#x \n",&pa[1]);printf("++pa=%#x \n",++pa);}int main(){printf("address of globle array=%#x \n",&ga);printf("value of globle array=%#x \n",ga);printf("address of ga[0]=%#x\n",&ga[0]);printf("address of ga[1]=%#x\n\n",&ga[1]);my_array_func(ga);my_point_func(ga);return 0;}输出结果为:
下图就是上面输入的图表表示:
0 0
- 指针和数组参数
- 数组参数和指针参数
- 数组参数和指针参数的分析
- 数组参数 和 指针参数 分析
- 数组参数和指针参数分析
- 数组参数和指针参数分析
- 数组参数和指针参数分析
- 指针数组和数组指针 数组参数传递
- 指针数组 和 数组指针分析 main函数的参数
- 11、二维数组、数组参数和指针参数
- 35-函数参数中的(数组参数和指针参数)
- 二维数组指针和函数参数
- C 指针和数组及函数参数
- 数组和指针做函数参数传递
- 二维数组指针和函数参数
- 主题四 指针和数组(下)----27.数组参数和指针参数
- 【C语言复习(十八)】数组参数和指针参数
- C语言深度剖析-----数组参数和指针参数分析
- Uva 1595 Symmetry
- 最大公约数GCD和最小公约数LCM
- mysql索引优化
- Codeforces-340-C(c++)
- Sicily 4190Prime Palindromes
- 指针和数组参数
- ZendStudio调试php脚本环境安装布置(备忘)
- Linux SPI框架 (3)
- Android Studio开发环境的搭建
- Android 从小白到大拿之路——数字时钟和虚拟时钟的实现
- Delphi中如何读取出MP3文件的信息
- poj 1002 487-3279 AC代码
- 二进制包安装mysql
- UVa102 Ecological Bin Packing(翻译+题解)