arrays - 将二维数组行地址传递给一维数组以供将来使用
问题描述
我正在尝试存储数组的行地址。似乎地址已正确传递,但它们似乎并未引用存储在数组中的值。
我想保存地址,以便可以在 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]);
}
}
解决方案
我不同意你的看法。它按预期工作。但是,不能保证,甚至有点糟糕的编程,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
推荐阅读
- java - Apache dbcp 连接池无法正常工作
- python - 如何根据字典键的相同值创建列表
- node.js - 尝试从 git 安装 npm 模块时出错
- r - 尝试在 R 中使用 spread() 函数时将我的数据框设为“宽”结构的问题
- css - 如何从非条件 formControls 禁用表单验证
- html - 如何在另一个html页面中预览浏览器中的本地文件
- azure - 我不知道如何使用 https 或 wss 连接服务器和客户端
- javascript - 如何使用 JavaScript 获取链接的重定向链接?
- c# - 在调试 Visual Studio 2019、WPF 时编辑 Xaml 文件
- node.js - 在 POST 参数中使用数组时 SHA1 签名无效