正如" 指针增量如何工作? "中所述,我有一个后续问题.
指针如何知道它指向的数据的基础大小?指针存储基础类型的大小,以便他们知道如何增加?
我希望以下代码将指针向前移动一个字节:
int intarr[] = { ... };
int *intptr = intarr;
intptr = intptr + 1;
printf("intarr[1] = %d\n", *intptr);
Run Code Online (Sandbox Code Playgroud)
根据链接网站上接受的答案,指针按字节增量而不是sizeof指向元素的底层将导致大规模的歇斯底里,混乱和混乱.
虽然我知道这可能是一个不可避免的结果,但我仍然不明白指针在这方面是如何工作的.我不能声明一个void指向某个struct[]类型数组的指针,如果我这样做了,void指针如何知道增量sizeof(struct mytype)?
编辑:我相信我已经解决了我所遇到的大部分困难,但就代码中的演示而言,我并不完全正确.
见这里:http://codepad.org/0d8veP4K
#include <stdio.h>
int main(int argc, char *argv[])
{
int intarr[] = { 0, 5, 10 };
int *intptr = intarr;
// get the value where the pointer points
printf("intptr(%p): %d\n", intptr, *intptr);
printf("intptr(%p): %d\n", intptr + 1, *(intptr + 1));
printf("intptr(%p): %d\n", intptr + 2, *(intptr + 2));
// the difference between the pointer value should be same as sizeof(int)
printf("intptr[0]: %p | intptr[1]: %p | difference: %d | expected: %d",
intptr, intptr + 1, (intptr + 1) - intptr, sizeof(int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它在类型声明中. p1知道类型的大小,因为它是sizeof(*p1)或sizeof(int). p2不知道sizeof(void)是不是没有定义.
int *p1;
void *p2;
p1++; // OK
p2++; // Not defined behavior in C
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |