2016-11-06 112 views
2

我想将size_t类型添加到指针。一些这样的:将size_t变量添加到指针

void function(size_t sizeA,size_t sizeB){ 
    void *pointer; 
    pointer=malloc(sizeA); 
    pointer=pointer+sizeB; 
} 

在hipothetic情况下,这将不段错误结束,问题是:我能做到这一点?将类型size_t添加到指针?结果地址将在地址'大小'?

+0

简短回答是肯定的。对于指针算术,请参阅http://stackoverflow.com/questions/394767/pointer-arithmetic – sg7

+0

@ sg7它比这更棘手,因为C不允许'void *'上的指针算术。 – dasblinkenlight

+0

@dasblinkenlight你是对的C.我的C++ 14编译器给出了一个警告:“算术中使用的类型为'void *'的指针。” – sg7

回答

1

我可以这样做吗[add size_t to pointer]?

是的,你可以,只要你投void指向一些其他类型:

pointer = ((char*)pointer) + sizeB; 

类型的指针由指针多少要提前确定。如果投射到char*sizeB的每个单位对应一个字节;如果投到int*,则sizeB的每个单元对应于在系统上存储int等所需的字节数。

但是,您必须确保sizeB的缩放指针大小小于或等于sizeA,否则结果指针将无效。如果你想制作一个指针可以是取消引用,则缩放的sizeB必须严格小于sizeA

+0

第一段很好地描述了经常被称为指针算术的“步幅”的内容。操作系统会把它提交到内存。 – WhozCraig

+0

如果我们将它转​​换为void *而不是char *'会怎样? –