目录
基本操作
通常我们通过以下方式进行指针变量的定义:
/* a pointer to unsigned char */
unsigned char * p_char;
/* a pointer to unsigned int*/
unsigned int * p_int;
/* a pointer to usertype */
usertype * p_usertype;
通常我们通过以下方式进行数组变量的操作:
/* Debug in Dev-C++ 5.11 */
unsigned char charArray[4] = {0,1,2,3};
unsigned int intArray[4] = {0,1,2,3};
/* scan array*/
{
unsigned char i;
/* define a pointer to array */
unsigned char * p_char = charArray; /* &charArray[0] */
/* access by p_char[i] */
for(i=0;i<4;i++)
{
printf("Data %d in charArray is %02X\n", i,p_char[i]);
}
/* access by *(p_char+i) */
for(i=0;i<4;i++)
{
printf("Data %d in charArray is %02X\n", i,*(p_char+i));
}
}
/* scan array*/
{
unsigned char i;
/* define a pointer to array */
unsigned int* p_int = intArray; /* &intArray[0] */
/* access by p_int[i] */
for(i=0;i<4;i++)
{
printf("Data %d in intArray is %04X\n", i,p_int[i]);
}
/* access by *(p_int+i) */
for(i=0;i<4;i++)
{
printf("Data %d in intArray is %04X\n", i,*(p_int+i));
}
}
指向指针数组的指针
指针数组:
指的是一个数组,数组元素是某个类型的指针,如下:
usertype userData0, userData1, userData2, userData3;
usertype * userTypeArray[4] = {&userData0,
&userData1,
&userData2,
&userData3};
指向指针数组的指针:
我们可以将上面定义的数组看成是类型为‘usertype *’的一个数组,那么同理:
/* define a pointer point to array with type 'usertype *'
* below code divide to 3 part:
* Part0 : type of variable -> usertype *
* Part1 : pointer -> *
* Part2 : name -> p_Array*/
usertype * *p_Array;
p_Array = userTypeArray; /* &userTypeArray[0] */
访问该指针数组
通过如下代码片段
p_Array[i] 或
*(p_Array+1)
访问userTypeArray的第i个元素
指针数组类型的指针
顾名思义,说的就是一个指针,其类型是一个指针数组类型。
typedef usertype * pArrayType[4];
定义一个指针数组类型,该类型名为pArrayType,表示一个一维指针数组,长度为4.
上述定义表明:
pArrayType类型是一个指针数组
内部元素的类型为usertype *
数组为1维数组,长度4
数组类型的指针操作
/* define a pointer with type pArrayType */
pArrayType * p_Array;
p_array = &userTypeArray;
注意上面的赋值,右侧是&userTypeArray而不是&userTypeArray[0]或userTypeArray。
理解的是:
pArrayType 这个类型本身就是一个指针数组类型,
此时usertype * userTypeArray[4]等价于pArrayType userTypeArray。
访问userTypeArray元素的方法:
需要先将地址转换为值,此时值对应的是一个指针数组,此时才能进行下标索引访问
1, *p_array,将地址取值得到变量'userTypeArray'
2, (*p_array)[i],通过下标访问数组元素
两种方式的不同之处