数组指针和指针数组
时间:2010-06-22 来源:chinawanglun
1、数组指针--指向数组的指针
2、声明:
int (* ptr)[100] = NULL; //声明指向数组的指针,数组内有100个int元素 |
3、访问数组指针指向数组的元素
(* ptr)[i];// 访问第一i个元素
或者 *(*ptr+i)
4、数组指针的使用
int a[100];
正确的赋值方式:
ptr = &a;//
或者 ptr = (int (*)[100])a;
错误的赋值方式:ptr=a;
因为:数组的名字会被隐式地转换为指向数组第一个元素的指针。而数组指针是指向整个数组的指针,所以ptr=a这种赋值方式不正确。必须显示地强制类型转换ptr = (int (*)[100])a;或者p = &a,这里&a也是可以到指向数组的指针。
5、数组指针的举例:
#include <stdio.h> printf("%p %p\n",ptr,a); printf("%d ",(*ptr)[2]); printf("%d\n",*(*ptr+4)); return 0; } |
函数的执行结果 0xbfa82dd4 0xbfa82dd4
3 5
可以看出ptr存放的内存地址和a所存放的内存地址是一样的都指向数组的首地址。但是ptr是指向数组的指针,而a被隐式地转换为指向数组第一个元素的指针。
对ptr+1加的长度是整个数组的长度,而a+1加的加的长度是一个数组元素的长度。
ptr是变量可以自加,自减操作。而a是变量,不能执行自加自减少。
二、指针数组
1、指针数组--数组元素都是指针类型的数组
2、声明
char *str[10];//声明一个有10个元素的数组,每个元素都是一个char *型指针。
int *array[10];//声明一个有10个元素的数组,每个元素都是一个指向int *型指针
3、数组指针的使用
#include <stdio.h> |
程序的执行结果如下:
输入一个字符串:aaaaa
输入一个字符串:bbbbbb
输入一个字符串:ccccc
输入一个字符串:ddddddddd
输入一个字符串:eeeee
str[0] = aaaaa
str[1] = bbbbbb
str[2] = ccccc
str[3] = ddddddddd
str[4] = eeeee