【问题标题】:Assigning a value of pointer to a 2D array将指针的值分配给二维数组
【发布时间】:2017-03-22 01:43:14
【问题描述】:

我有下面这段运行良好的代码:

int array[16][2] = {{0}};

void *buffer_ptr = NULL;

get_buffer(&buffer_ptr); // This is a function which gives me the address of 
buffer ptr

file_read(handle, size, buffer_ptr); // This function reads and stores data into buffer_ptr

现在我想将此读取值复制到 buffer_ptr 到数组中。我目前正在执行此操作:

for (i = 0; i < 16; i++)
{
    array[i][0] = *((int *)buffer_ptr+(2*i));
    array[i][1] = *((int *)buffer_ptr+(2*i)+1);
} 

但我确信有更好的方法来做到这一点。

谢谢。

【问题讨论】:

  • get_buffer 是做什么的?您的评论不是很有启发性,因为您已经知道buffer_ptr的地址。
  • 这更像是一个Code Review 问题
  • 也许你想要memcpy(&amp;array, buffer_ptr, sizeof array);
  • 文件的格式是什么?

标签: c arrays pointers


【解决方案1】:

但我确信有更好的方法来做到这一点。

是的,直接读入数组。不需要中间缓冲区。

我猜你的文件是一堆 4 字节的整数,你一次想要两个。首先,为array 使用固定宽度类型,否则您可能会得到错误大小的整数。

#include <stdint.h>

int32_t array[16][2] = {{0}};

然后直接从文件中读取到数组中,一次是两个 4 字节整数。

FILE *fp = fopen(file, "rb");
if( fp == NULL ) {
    fprintf(stderr, "Could not open '%s' for reading: %s\n", file, strerror(errno));
    exit(1);
}

for (int i = 0; i < 16; i++)
{
    fread(array[i], 4, 2, fp);
}

我相信您甚至可以将其缩减为单次阅读。

fread(array, 4, 32, fp);

【讨论】:

  • 我无法直接阅读。直接从内存中读取时获得某些受限区域。我给 buffer_ptr 一个特定的地址,该地址可以读取,但数组只是一个局部变量,它将进入堆栈,我无法从其中的外部存储器中读取。
  • @R.P.您需要提供更多关于您的问题的详细信息。
猜你喜欢
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2020-08-03
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多