gpt4 book ai didi

c - 使用指针添加两个数字

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:31 24 4
gpt4 key购买 nike

我在互联网上找到了这段代码,用于使用指针将两个数字相加。不明白它是如何工作的?任何帮助将不胜感激。

#include <stdio.h>
#include <conio.h>
int main()
{
int a,b,sum;
char *p;
printf("Enter 2 values : ");
scanf("%d%d",&a,&b);
p = (char *)a; // Using pointers
sum = (int)&p[b];
printf("sum = %d",sum);
getch();
return 0;
}

最佳答案

以下行将 a 中的值解释为地址:

p = (char *)a; 

&p[b] 是从 p 开始的数组的第 b 个元素的地址。因此,由于数组的每个元素的大小都是 1,因此它是一个指向地址 p+b 的字符指针。由于p包含a,所以是p+a的地址。

最后,以下行将指针转换回 int:

 sum = (int)&p[b];    

但不用说:这是一个奇怪的结构。

补充说明:

请注意,根据 C++ 标准,存在一些限制:

5.2.10/5: A value of integral type (...) can be explicitly converted to a pointer.

5.2.10/4: A pointer can be explicitly converted to any integral type large enough to hold it.

所以最好验证 sizeof(int) >= sizeof(char*)

最后,虽然这个添加适用于大多数实现,但这并不是所有 CPU 架构的保证行为,因为整数和指针之间的映射函数是实现定义的:

A pointer converted to an integer of sufficient size (if any suchexists on the implementation) and back to the same pointer type willhave its original value; mappings between pointers and integers areotherwise implementation-defined.

关于c - 使用指针添加两个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706882/

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