c - 将指针的值分配给二维数组

标签 c arrays pointers

我有以下这段代码工作正常:

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);
} 

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

谢谢。

最佳答案

But I am sure there is a better way to do this.

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

我猜你的文件是一堆 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);

关于c - 将指针的值分配给二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42941268/

相关文章:

arrays - C语言中数组变量是如何存储的? (不是内存本身,而是命名变量中的指针)

c - 与 c 中的指针相关的问题

c - 错误 C2011 : 'timezone' :'struct' type redefinition (postgres)

java - 设置对象数组时如何修复 FindBug 错误 'May expose internal representation by incorporating reference to mutable object'?

c - OpenSSL MD5 每次都会给出不同的哈希值

C:指向结构中函数的指针

c - VirtualBox 如何处理 guest Linux 的中断?

c 指向结构体的指针问题

arrays - 如何在 Perl 中合并散列?

python - 如何在一个 NumPy 数组中搜索位置,以便在这些位置获取第二个 NumPy 数组中的值?