首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么指向整数的指针增加4个字节?

为什么指向整数的指针增加4个字节?
EN

Stack Overflow用户
提问于 2012-11-16 08:23:17
回答 5查看 6.2K关注 0票数 1

可能重复: Question about pointer increment

当我增加一个int指针时,它的地址就有一个4字节的空白。为甚麽会这样?为什么int指针需要4个字节来存储,而char需要2个字节呢?

EN

回答 5

Stack Overflow用户

发布于 2012-11-16 08:24:35

指向任何数据类型的指针的大小始终与系统支持的大小相同。

如果系统为32 -bit,则所有指针的大小为4个字节。

在指针算法中,当您执行ptr++ptr--时,增量和递减将根据该ptr指针所指向的数据类型的大小进行。

代码语言:javascript
复制
char *cptr;
int *iptr;
char c[5];
int a[5];
cptr=c;
iptr=a;

通过执行cptr++,您将得到c[1],指针只会增加一个字节,您可以检查每个字符的地址。

类似地,iptr++将给您提供a[1]这里的指针增加了4个字节。

代码语言:javascript
复制
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或其他数据类型的大小

票数 2
EN

Stack Overflow用户

发布于 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));//总是真实的!
票数 2
EN

Stack Overflow用户

发布于 2012-11-16 08:25:02

因为指针所指向的数据(int)的大小有4字节大小,所以指针增加了4字节(数据(Int)的大小)

另一个例子:如果您的结构大小为8字节,并且有指向此结构的指针,则该指针的增量将为8字节:

代码语言:javascript
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13412850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档