指向指针数组的指针和指针数组类型的指针

本文详细介绍了指针的基本操作,包括如何定义指针变量和操作数组。接着,深入探讨了指向指针数组的指针的概念,展示了如何通过指针访问数组元素。最后,讲解了指针数组类型的指针,定义了一个指针数组类型并展示了其操作方法。通过实例代码,读者可以更好地理解指针与数组之间的关系及其在C语言中的应用。
摘要由CSDN通过智能技术生成

目录

基本操作

指向指针数组的指针

指针数组类型的指针


基本操作

通常我们通过以下方式进行指针变量的定义:

/* 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],通过下标访问数组元素

两种方式的不同之处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值