我想将size_t类型添加到指针。一些这样的:将size_t变量添加到指针
void function(size_t sizeA,size_t sizeB){
void *pointer;
pointer=malloc(sizeA);
pointer=pointer+sizeB;
}
在hipothetic情况下,这将不段错误结束,问题是:我能做到这一点?将类型size_t添加到指针?结果地址将在地址'大小'?
我想将size_t类型添加到指针。一些这样的:将size_t变量添加到指针
void function(size_t sizeA,size_t sizeB){
void *pointer;
pointer=malloc(sizeA);
pointer=pointer+sizeB;
}
在hipothetic情况下,这将不段错误结束,问题是:我能做到这一点?将类型size_t添加到指针?结果地址将在地址'大小'?
我可以这样做吗[add
size_t
to pointer]?
是的,你可以,只要你投void
指向一些其他类型:
pointer = ((char*)pointer) + sizeB;
类型的指针由指针多少要提前确定。如果投射到char*
,sizeB
的每个单位对应一个字节;如果投到int*
,则sizeB
的每个单元对应于在系统上存储int
等所需的字节数。
但是,您必须确保sizeB
的缩放指针大小小于或等于sizeA
,否则结果指针将无效。如果你想制作一个指针可以是取消引用,则缩放的sizeB
必须严格小于sizeA
。
第一段很好地描述了经常被称为指针算术的“步幅”的内容。操作系统会把它提交到内存。 – WhozCraig
如果我们将它转换为void *而不是char *'会怎样? –
简短回答是肯定的。对于指针算术,请参阅http://stackoverflow.com/questions/394767/pointer-arithmetic – sg7
@ sg7它比这更棘手,因为C不允许'void *'上的指针算术。 – dasblinkenlight
@dasblinkenlight你是对的C.我的C++ 14编译器给出了一个警告:“算术中使用的类型为'void *'的指针。” – sg7