【看到哪里写到哪里】C的“数组指针”

C里面,数组指针,不是基本类型。顾名思义,数组指针,是指针,是指向数组的指针;

1.它的基本定义样子是

type (*ptr)[size];
  1. 这个指针,指向的数组的;
  2. 这里要注意,要定义数组指针,括号是必须的;如果没有括号,就是一个指针数组了;

2.数组指针的定义和初始化

int array[5] = {10, 20, 30, 40, 50};

int (*arrayPtr)[5];
arrayPtr = &array;  
  1. arrayPtr是一个指针,它指向一个包含5个Int的数组;
  2. 要使用&获取数组的地址,赋值给到数组指针

3、一个二维数值的例子

// Define the structure for the data node
typedef struct DataNode
{
    int index;
    char name[256]; // Adjust size as necessary
    double value;   // Assuming the value is numeric
    struct DataNode *prev;
    struct DataNode *next;
} DataNode;

void printNodeData(DataNode *node)
{
    printf("[%3d,%6.2f,%6s]", node->index, node->value, node->name);
}
void printArray(DataNode (*arr)[4])
{
    // DataNode(*pRow)[] = &arr[1];
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            DataNode node = arr[i][j];
            printNodeData(&arr[i][j]);
        }
        printf("\n");
    }
}
void testArray()
{
    DataNode arr[2][4] = {
        {{1, "Node1", 10.5}, {2, "Node2", 20.5}, {3, "Node3", 30.5}, {4, "Node4", 40.5}},
        {{5, "Node5", 50.5}, {6, "Node6", 60.5}, {7, "Node7", 70.5}, {8, "Node8", 80.6}}};
    printArray(arr);          //Line 4
    DataNode(*arrPtr)[4];      //Line 5
    arrPtr = arr;              //LIne 6
    printArray(arrPtr);        //Line 7
    printNodeData(&arrPtr[0][2]);     //Line 8

    printNodeData(&(arrPtr + 1)[0][3]);  //LINE 10 
    arrPtr++;                            //Line 11    
    printNodeData(&(arrPtr)[0][3]);        //Line 12
                                            //Line 13
    // printArray(arrPtr);                // Line 14
    printNodeData(arrPtr [0]);            // Line 15
    printNodeData(&(arrPtr)[0][0]);        //Line 16
}
  1. Line 4和Line7的结果是一样的;
  2. 要注意在line8 中,传入参数,是一个*DataNode,
  3. Line10 和Line12的结果是一样的。这里要注意arrPtr+1,是这个数组指针的+1,是直接跳过到二维数组的下一行;
  4. 可以在Debug状态下查看arrPtr的地址变化!
  5. Line14,是不可以执行的,因为arrPtr增加一行之后,数组只有一行了,函数printArray()是要写成做两行的输出的。如果执行,会有不可知的结果输出。
  6. 可以考虑一下,LIne 15和Line16有区别么?

其实,还是要清楚指针的基本概念:它是指向一个内存地址的数值!它的增加和减少的位移,是由它的数据类型决定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值