我想知道,你能在一个数组中创建一个指向一组变量的指针吗? 像这样
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/