gpt4 book ai didi

c++ - 解决指针算术问题

转载 作者:行者123 更新时间:2023-11-30 17:06:19 25 4
gpt4 key购买 nike

在下面的代码中:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{

double *p= (double *)malloc(sizeof(double)*5);
double *s= (double *)malloc(sizeof(double));

printf("Enter first value: "); scanf("%lf",p);
printf("\nEnter 2nd value: "); scanf("%lf",p+1);
printf("\nEnter 3rd value: "); scanf("%lf",p+2);

printf("\n\ntable is:\n");
printf("1st value %f\taddress: %p\n",*p,p);
printf("2nd value %f\taddress: %p\n",*(p+1),(p+1));
printf("3rd value %f\taddress: %p\n",*(p+2),(p+2));
printf("\n\n\nvalue %f\taddress: %p\n",*s,s);

return 0;}

现在假设指针p包含十六进制值00BD0D50。但是当我使用 p+1 时获得的地址将给出十六进制值。 00BD0D58。为什么即使只向 p 的值添加 1,这些值之间也会存在 00000008 的差距?

I tried using %d in place of %p to output pointer's value but still it had a difference of 8.

如果背后有某种原因,是否有其他方法可以访问位于 00000008 字节间隙之间的地址处的值? (例如,在上面的情况下,有什么方法可以访问 00BD0D51 处的值吗?)

最佳答案

Why there is this gap of 00000008 between these values even when only 1 is added to p's value ?

因为在你的机器上 double 类型的大小大概是 8 个字节。这就是所谓的指针算术。因此,当您向指针添加 1 时,实际上由于指针对象的大小,会向其添加 8 个字节。

is there any other way to access a value at address lying between this gap of 00000008 bytes?

是的,在进行指针算术之前,您需要将指针强制转换为 char *

PS。此外,当尝试打印 *s 的值时,您会出现未定义的行为 - 因为它尚未初始化。

此外,当使用 %p 格式说明符时,您需要将指针强制转换为 printf 中的 void*,例如

 printf("1st value %f\taddress: %p\n",*p, (void*) p);

关于c++ - 解决指针算术问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com