指向数组的指针

Kel*_*ton 5 c c++ arrays pointers

我想知道,你能指出一个数组中的一组变量吗?像这样

array[20]{'a','b','c',...}
pointer = array[6 through 10];
Run Code Online (Sandbox Code Playgroud)

所以你可以说......

*pointer[0] == array[6];
Run Code Online (Sandbox Code Playgroud)

*pointer[5] == array[10];
Run Code Online (Sandbox Code Playgroud)

和*指针的长度

5 == sizeof(*pointer) \ sizeof(type);
Run Code Online (Sandbox Code Playgroud)

让我解释一下我想要完成的事情,也许这会让我有所了解.我想将一个完整的文件读入一个缓冲区,但我想要一块一块地完成.将一个小数组传递给read()然后将其循环到更大的数组中就会失败.我希望我可以直接"指向"我要填充的缓冲区中的一个区域,并将其传递给read()函数.

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

这会适得其反,因为我正在尝试将整个文件一次性读入内存.尽可能快地.

我需要速度!!!

caf*_*caf 12

尽管每个人都说过,这可能的,只需要一个小小的警告 - 除非你有一个C99编译器,你必须知道编译时你想要的"切片"的大小.

要正确声明和使用指针,您还必须知道下标运算符[]*解除引用运算符之前绑定,因此需要使用parantheses.

看吧:

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));
Run Code Online (Sandbox Code Playgroud)

附录:

为了解决您所提出的实际问题,这会更容易.只需使用一个设置为缓冲区数组偏移量的指针,例如:

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] */
Run Code Online (Sandbox Code Playgroud)


Fra*_*ank 6

果然你可以.

int a[4] = {1,2,3,4};
int *b = &a[2];
cout << b[0] << "-" << b[1] << endl;
Run Code Online (Sandbox Code Playgroud)

输出将是3-4.