每日一C,指向一维、二维数组的指针及数组作为函数形参的思考(二)
来源:互联网 发布:数据列表测试用例 编辑:程序博客网 时间:2024/05/16 19:28
时间:2017/06/01 20:49
指向一维、二维数组的指针
例:int vector[10], *vp=vector;//①
int vector[3][10], *vp=vector;//②
①合法,它为一个整型数组分配内存,并把vp声明为一个指向整型的指针
②为何不合法,vp的初始化是有问题的,因为vector并不是一个指向整型的指针,而是指向一个指向整型数组的指针
int (*p)[10];//注意指针数组与数组指针的区别
int (*p)[]=vector;//应避免出现这种数组长度为空的情况,有些编译器无法捕捉这种错误
int (*p)[10]=vector;//③它使P指向vector的第一行
array_name和&array_name的异同
前者是指向数组中第一个元素的指针,后者是指向整个数组的指针。
char a[MAX]; /*array of MAX characters*/
char *p = a; /*p为指向数组的指针*/
char *pa = &a; /*该语句是不正确的,pa的类型为'char *',而&a的类型为'char (*)[MAX]’*/
char (*pb)[MAX] = &a; /*该语句是正确的,pb的类型为'char (*)[MAX]'*/
例:
#include<stdio.h>
int main()
{
char a[5] = {'a','b','c','d','\0'};
char *p = a;
//运行下面这句后, vc6.0 提示的错误为:cannot convert from 'char (*)[5]' to 'char *',&a的类型应该是指向一个数组的指针
//char *pa = &a; // &a的类型应该是指向一个数组的指针 而pa的类型是“char”
char *pa = *(&a); //这样即可, *(&a)即相当于 char a[5]
//所以,应该定义一个指向相同类型和大小的数组的指针来获得“&a”的值
char (*pp)[5];
pp = &a;
printf("%d\n%s\n",&pa, pa);
printf("%d\n%d\n",&p, &pp);
printf("%s\n%s\n", p, pp);
}
思考:数组作为函数的参数时,能不能通过sizeof运算符得到该数组的大小??
不可以,因为函数的数组参数相当于指向该数组的第一个元素的指针。
不过有其他方法告诉函数数组参数的大小
例如可以引入某种规则来结束一个数组,例如在C语言中字符串总是以ASCII字符NUL(‘\0’)结束,而一个指针数组总是以空指针结束。
例:
void printMany( char *strings[] )
{
int i = 0;
while( strings[i] != NULL )
{
puts(strings[i++]);
}
}
可以简化 用指针来代替数组下标的方法
void printMany( char *strings[] )
{
while( *strings )
{
puts(*strings++);
}
}
尽管你不能改变一个数组名的值,但是strings是一个数组参数,相当于一个指针,因此可以对它进行自增运算,并且可以在调用puts()函数时对strings进行自增运算。
阅读全文
0 0
- 每日一C,指向一维、二维数组的指针及数组作为函数形参的思考(二)
- 一/二维数组与指向一/二维数组的指针
- [指针二]指向一维数组、二维数组的指针使用
- 指针 指向一维数组 二维数组 字符数组 返回值为地址 指向函数的指针 指针数组 常量指针
- 指向一维数组的指针变量和指向二维数组的指针变量---注意其指针表示
- 一维指针和二维指针指向二维数组的一些问题
- 二维数组,指针数组,指向指针数组的指针的应用练习〈一〉
- 9、C语言中二维数组及数组名及指向二维数组的指针变量
- 【C语言】12-指向一维数组元素的指针
- 【C语言】12-指向一维数组元素的指针
- 【C语言】12-指向一维数组元素的指针
- 【C语言】12-指向一维数组元素的指针
- 【C语言】12-指向一维数组元素的指针
- 【C语言】12-指向一维数组元素的指针
- C语言-指向一维数组元素的指针
- 【C语言】12-指向一维数组元素的指针
- 数组指针,指针数组,二维数组作为参数传递给以指针的指针作为形参的函数
- 【每日一C之十四】指向函数的指针
- 安卓SharedPreferences存储与读取
- 如何通俗地理解 Gradle?
- leetcode_162. Find Peak Element
- Android压缩安装包图片
- POJ 1277 Beer Land 笔记
- 每日一C,指向一维、二维数组的指针及数组作为函数形参的思考(二)
- C++中数字与字符串之间的转换
- 【算法题】计算糖果
- centos 常用查进程服务命令
- 通过Arduino控制二自由度云台
- 统计二叉树中叶子节点的数目
- Java初级入门之 Three 控制语句
- Spark中组件Mllib的学习 RowMatrix行矩阵
- struts2第十二讲学习笔记,综合使用实现登录,页面中使用ognl表达式请求值