gpt4 book ai didi

c - 如何仅使用指针变量将两个数字相加,例如 int *a,*b,*add;

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:10 26 4
gpt4 key购买 nike

我在 32 位体系结构中遇到指针问题。我想仅使用指针变量将两个数字相加,例如:int *a,*b,*add;但在基于 32 位的编译器(例如代码块)中不会给出输出。

但对于基于 16 位的编译器(例如 Turbo C++),它可以正常工作。

这是我试过的代码

int *a,*b,*add;
printf("Enter two no.");
scanf("%d%d",a,b);
*add=*a+*b;

在代码块中,它没有返回任何内容。但在 Turbo C++ 中它工作正常。

最佳答案

scanf("%d%d",a,b); 告诉 scanf 从输入中读取数字并将它们的值写入内存中 ab 点。但是 ab 没有正确指向任何地方,因为您没有初始化它们。它们在 int *a,*b,*add; 中的定义和它们在 scanf 中的使用都没有为它们指向的位置设置值。

要使 abadd 指向实际的 int 对象,您必须定义或分配一个 int 对象,然后将其地址分配给 abadd

例如,您可以使用:

int x, y, z;
int *a = x, *b = y, *add = z;

或者:

int *a, *b, *add;
a = malloc(sizeof *a);
b = malloc(sizeof *b);
add = malloc(sizeof *add);
if (!a || !b || !c)
{
fprintf(stderr, "Error, memory allocation failed.\n");
exit(EXIT_FAILURE); // Include <stdlib.h> for this.
}

如果您的代码在 Turbo C++ 中“有效”,可能是因为未初始化的 abadd 取值恰好在恰好指向可用内存的内存中。这不是可靠的行为,如果对程序进行任何更改,它很容易中断。始终在使用指针和其他对象之前对其进行初始化。

当您使用完通过 malloc 分配的内存时,您通常应该释放它,您可以使用 free 来释放它:

free(add);
free(b);
free(a);

关于c - 如何仅使用指针变量将两个数字相加,例如 int *a,*b,*add;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56312488/

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