谁能解释一下 ptr+1 和 ptr[0]+1 之间的区别

悉达多·悉都

假设sizeof整数为 4 个字节, sizeof(int *) 为 8 个字节,我不明白为什么 ptr +1 向前移动了 8 个字节的大小,而 ptr[0]+1 向前移动了 4 个字节的大小。

int main()
{
    int a[] = {1, 2, 3};
    int *ptr[3]; //array of 3 elements pointed to integer 
    int *b;

    ptr[0] = a;

    printf("a: %lu\n", a);
    printf("a + 1: %lu\n\n", a+1);

    printf("ptr: %lu\n", ptr);
    printf("ptr + 1: %lu\n", ptr+1);

    printf("ptr[0]: %lu\n", ptr[0]);//ptr[0] holds base address of array a
    printf("ptr[1]: %lu\n\n", ptr[0] + 1 );

    printf("&ptr: %lu\n", &ptr);
    printf("&ptr + 1: %lu\n", &ptr+1);
}
巴萨亚

如果我正确理解你的问题,你就有一个指向int( int *)的指针数组你期望第二个元素的地址比第一个元素的地址高四个字节,你问为什么不是这样?

如果这确实是您的问题,那么答案是指针的大小不一定与 的大小相同int

在 64 位编译器上,指针的大小通常为 8 个字节,而 int 的大小可能为 4 个字节。

您可以打印出来sizeof(int)sizeof(int *)清楚地看到这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C中的* ptr + = 1和* ptr ++之间的区别

谁能解释一下这段代码?为什么显示 1

array.slice(-1)[0] -- 有人能解释一下吗?

您能解释一下我吗(int i = 0; i <8; i ++,数据>> = 1)?

有人能解释一下什么 new string[,] { { L0, L1 }, { D0, D1 } }[thc, 0]; 是在做?

谁能向我解释一下 Selenium 中的窗口和框架之间有什么区别?

你能解释一下最后一行的“m 1”吗?

1>和>之间的区别

-1和〜0之间有区别吗?

C字符串中ptr,ptr [0]和&ptr [0]之间的区别

!a ==-1和a!=-1之间的区别

谁能解释一下什么是Django modelform_factory和modelformset_factory?

MOV和MOV ptr之间的区别

有人能解释一下这个证明中的 X、I 和 Pr 是什么吗?还有为什么第一个 sigma 从 j=i+1 开始?

malloc(sizeof(ptr))和malloc(sizeof(ptr *))之间的区别?

unique_ptr和shared_ptr之间的区别

有人能解释一下如何注入(Hash.new(0)) { |total, bigram| 总计[bigram] += 1; 总计 }.sort_by { |_key, value| value }.reverse.to_h 有效吗?

反向和[::-1]之间的区别

python中A [0]和A [0:1] numpy数组之间的区别

在任何情况下,“ ptr1-ptr2> 0”与“ ptr1> ptr2”不同吗?

Python:1和1之间的区别

Python中exit(0)和exit(1)之间的区别

Python中exit(0)和exit(1)之间的区别

格式化时 %-8.8s 是什么意思?你能解释一下这个日期格式 %1$tY%1$tm%1$td 吗?

谁能解释一下在android中实现MVVM架构时如何使用ViewModel和LiveData

range(n,-1,-1)和reversed(range(0,n + 1))之间有什么区别吗?

有人可以解释一下Graal,GraalVM,Truffle和SubstrateVM之间的区别吗?

'2>&1'和'&> filename'之间的区别

警报var ++和var + 1之间的区别