首页 > 解决方案 > 将二维数组行地址传递给一维数组以供将来使用

问题描述

我正在尝试存储数组的行地址。似乎地址已正确传递,但它们似乎并未引用存储在数组中的值。

我想保存地址,以便可以在 Python 应用程序中使用它们。

#include <stdio.h>
#include "func.h"

int main(int argc, const char * argv[]) {
    
    uint64_t pkt[3];
    func(pkt);
    
    printf ("The address in main is %p\n", pkt[0]);
    printf ("The address in main is %p\n", pkt[1]);
    printf ("The address in main is %p\n", pkt[2]);
    
    uint8_t *ptr0 = (uint8_t*)pkt[0];
    printf ("The address in main is %p\n", ptr0);
    printf("%d\n", ptr0[0]);
    printf("%d\n", ptr0[1]);
    printf("%d\n", ptr0[2]);
    
    uint8_t *ptr1 = (uint8_t*)pkt[1];
    printf ("The address in main is %p\n", ptr1);
    printf("%d\n", ptr1[0]);
    printf("%d\n", ptr1[1]);
    printf("%d\n", ptr1[2]);
    
    uint8_t *ptr2 = (uint8_t*)pkt[2];
    printf ("The address in main is %p\n", ptr2);
    printf("%d\n", ptr2[0]);
    printf("%d\n", ptr2[1]);
    printf("%d\n", ptr2[2]);
    
    return 0;
}
#include "func.h"


void func(uint64_t* pkt)
{
    uint8_t matrix[3][3] = { {3 , 7 , 4} ,
        {1, 2 , 8} ,
        {8 , 3, 2} } ;
    int i = 0;
    
    for (i = 0; i < 3; i++)
    {
        pkt[i] = (uintptr_t)&matrix[i];
        printf("The address is %p\n", &matrix[i]);
        printf("The address is %p\n", pkt[i]);
    }
    
}

标签: arrayscpointersmultidimensional-array

解决方案


我不同意你的看法。它按预期工作。但是,不能保证,甚至有点糟糕的编程,matrix从函数返回后的地址是有效的。因此,如果您不在堆中分配地址,则不应使用在本地函数中定义的事物的地址。

The address is 0x7ffcfeae7f6f
The address is 0x7ffcfeae7f6f
The address is 0x7ffcfeae7f72
The address is 0x7ffcfeae7f72
The address is 0x7ffcfeae7f75
The address is 0x7ffcfeae7f75
The address in main is 0x7ffcfeae7f6f
The address in main is 0x7ffcfeae7f72
The address in main is 0x7ffcfeae7f75
The address in main is 0x7ffcfeae7f6f
3
7
4
The address in main is 0x7ffcfeae7f72
1
2
8
The address in main is 0x7ffcfeae7f75
8
3
2

推荐阅读