黑马程序员--C语言--01-指针数组、指向数组的指针、指向指针的指针
2014-12-15 20:43
253 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、什么是指针数组和指向数组的指针
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针
int* a[10] 指针数组,表示:数组a中的元素都为int型指针,元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*;
int (*a)[10] 数组指针,表示:指向数组a的指针,元素表示:(*a)[i]。
int c[10]={1,2,3,4,5,6,7,8,9,10}; int *a[10]; //指针数组 int (*b)[10]; //数组指针 b=&c;
实际应用中,对于指针数组可以这样使用:
typedef int* pInt; pInt a[10];
数组名相当于一个指针常量
2、指向指针的指针
一个指针变量内部可以存储一个值,这个值是另外一个对象的地址,所以一个指针变量可以指向一个普通变量,同样这个指针变量也有一个地址,也就是说可以有一个东西指向这个指针变量,然后再通过这个指针变量指向这个对象。这个指针就是指向指针的指针(二重指针):int *p1=&i; int **p2=&p1;
下面看一下函数的形参可以接收那些实参类型,编译时不会报错
int a[3],b[2][3],c,*d[3]; void fun1(int *p); void fun2(int (*p)[3]); void fun3(int **p); void fun4(int p[3]); void fun5(int p[]); void fun6(int p[2][3]); void fun7(int (&p)[3]);
见下表
函数 | 传入这些值编译器不会报错 |
fun1 | a, &a[i], *b ,b[i],&b[i][j] ,&c ,d[i] |
fun2 | b,b+i |
fun3 | d |
fun4 | a, &a[i], *b ,b[i],&b[i][j] ,&c ,d[i] |
fun5 | a, &a[i], *b ,b[i],&b[i][j] ,&c ,d[i] |
fun6 | b |
fun7 | a |
1、对于fun1 fun4 fun5:在编译器看来fun1,fun4,fun5的声明是一样,在编译时候,编译器把数组的大小舍去不考虑,只考虑它是一个指针,也就是说有没有大小说明是一样的,所以三者的形式都是fun1的形式(其实只要提供了int*指针就可以了);
2、对于fun2:p是一个指向一个含有3个元素的数组,这样b和b+i正好合适,而a却不是(它是指向a[0]的,不是指向这个数组的);
3、对于fun3:p是一个指针的指针,而d指向d[0],同时d[0]又是一个指针,所以d就是一个指针的指针。但是b却不是(它是一个2*3的矩阵也就是年int
[2][3]类型);
4、对于fun6:p是一个2*3的数组类型,和b恰好完全匹配;
5、对于fun7:以上的解释对于引用是不适用的,如果变量被声明为数组的引用,那么编译器就要考虑数组的大小了,那么必须和声明一模一样(所以fun7就只有a合适);
相关文章推荐
- 黑马程序员04--C语言--01-指针数组、指向数组的指针、指向指针的指针
- C语言的指向数组的指针
- 【C语言】12-指向一维数组元素的指针
- 黑马程序员 C语言的字符数组和字符指针
- 黑马程序员-IOS笔记-C语言中的字符串数组 指针
- 黑马程序员——c语言的复杂数据类型:数组和指针
- 黑马程序员—C语言指针与数组
- [黑马程序员]06[C语言]指针部分笔记总结-01
- c语言学习,指针函数、函数指针、指针的指针、指向指针数组的指针
- c语言之指针(指向数组元素的指针与指向数组的指针)
- 黑马程序员——C语言——数组和指针
- C语言学习笔记.指针4--数组指针和指向数组的指针变量(一)
- c语言 - 指向数组的指针与指针数组
- C语言指向多维数组的指针
- c语言学习,指针函数、函数指针、指针的指针、指向指针数组的指针
- 【C语言】12-指向一维数组元素的指针
- 【C语言】12-指向一维数组元素的指针
- C语言学习笔记【指针04】指针数组与指向指针的指针 推荐
- C语言学习笔记之指向数组元素的指针和指向数组的指针
- 黑马程序员——C语言—数组、指针