当我增加一个int指针时,它的地址就有一个4字节的空白。为甚麽会这样?为什么int指针需要4个字节来存储,而char需要2个字节呢?
发布于 2012-11-16 08:24:35
指向任何数据类型的指针的大小始终与系统支持的大小相同。
如果系统为32 -bit,则所有指针的大小为4个字节。
在指针算法中,当您执行ptr++或ptr--时,增量和递减将根据该ptr指针所指向的数据类型的大小进行。
char *cptr;
int *iptr;
char c[5];
int a[5];
cptr=c;
iptr=a;通过执行cptr++,您将得到c[1],指针只会增加一个字节,您可以检查每个字符的地址。
类似地,iptr++将给您提供a[1]这里的指针增加了4个字节。
int main()
{
int i;
for(i=0;i<5;i++)
{
printf("%p\t",&c[i]); //internally pointer arithmeitc: (c+sizeof(char)*i) ,
printf("%p\n",&a[i]); //intenally pointer arithmetic : (a+sizeof(int)*i)
}
}定义了int或其他数据类型的大小
发布于 2012-11-16 08:27:32
以下是一般规则:
T,则其大小N计算为sizeof(T)字节。因此,如果通过T*增加指针,那么N类型的指针就会增加。
从数学上讲,
T *p = getT();size_t diff = static_cast(p+1) - static_cast(p);bool alwaysTrue = (diff == sizeof(T));//总是真实的!发布于 2012-11-16 08:25:02
因为指针所指向的数据(int)的大小有4字节大小,所以指针增加了4字节(数据(Int)的大小)
另一个例子:如果您的结构大小为8字节,并且有指向此结构的指针,则该指针的增量将为8字节:
struct test {
int x;
int y;
}
struct test ARRAY[50];
struct test *p=ARRAY; // p pointer is pointing here to the first element ARRAY[0]. ARRAY[0] is with size 8 bytes
p++; // this will increment p with 8 byte (size of struct test). So p now is pointing to the second element ARRAY[1]https://stackoverflow.com/questions/13412850
复制相似问题