c++ - 指向数组的指针

标签 c++ c arrays pointers

我想知道,你能在一个数组中创建一个指向一组变量的指针吗? 像这样

array[20]{'a','b','c',...}
pointer = array[6 through 10];

那么你可以说...

*pointer[0] == array[6];

*pointer[5] == array[10];

和*指针的长度

5 == sizeof(*pointer) \ sizeof(type);

确定

让我解释一下我想要完成的事情,也许这会让我清醒一点。 我想将整个文件读入缓冲区,但我想逐个读取。将一个小数组传递给 read() 然后将其循环到更大的数组中达不到目的。我希望我可以直接“指向”我想要填充的缓冲区中的一个区域,并将其传递给 read() 函数。

我不想在背后使用流或任何缓冲

这会适得其反,因为我试图一次将整个文件读入内存。尽可能快。

我需要速度!!!

最佳答案

尽管每个人都说过,这是可能的,但有一个小警告 - 除非您有 C99 编译器,否则您必须在编译时知道您想要的“切片”的大小。

要正确声明和使用指针,您还必须知道下标运算符 []* 解引用运算符之前绑定(bind),因此需要括号。

看:

int array[20] = {'a','b','c','d','e','f','g','h','i','j','k','l'};
int (*pointer)[10 - 6 + 1] = (int (*)[10 - 6 + 1])&array[6];    /* = array[6 through 10] */

printf("(*pointer)[0] = %c\n", (*pointer)[0]);
printf("(*pointer)[4] = %c\n", (*pointer)[4]);
printf("sizeof *pointer / sizeof **pointer = %lu\n", (unsigned long)(sizeof *pointer / sizeof **pointer));

附录:

对于您提出的实际问题的答案,这要容易得多。只需使用设置为缓冲区数组偏移量的指针,例如:

unsigned char buffer[102400];
unsigned char *ptr;

/* ... */
ptr = buffer + 500;
read(fd, ptr, 1024); /* Try and read up to 1024 bytes at position buffer[500] */

关于c++ - 指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1906233/

相关文章:

c++ - 创建标题中带有时间戳的文本文件

c++ - 如何将接口(interface)指针传递给线程?

c - fscanf 跳过我的第一个字符

c - 无法理解格式字符串利用代码

javascript - JavaScript 中是否有一种有效的算法可以在较大的数组集中查找不同数组的数量?

c# - 如何解析具有交替名称行和整数列表的文本文件?

Javascript concat 未按预期工作 - 未合并

c++ - 在索引和值类型上参数化的惯用 vector 类型

c++ - Qt - 从 QDialog 关闭程序(在 MainWindow 完全加载之前)

C 为什么 txt 文件上的简单 fgets 占用高 cpu 使用率?