gpt4 book ai didi

比较一个整数和一个变量的地址

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:53 25 4
gpt4 key购买 nike

我需要有关如何将变量的地址与整数进行比较的帮助。//或者比较指针和整数的情况。//

要求程序应该有一个带有初始化值的数组。该程序应同时显示值和值的地址。然后程序要求用户输入用户想要更改的值的地址。我想显示一条错误消息,例如“输入无效!”当程序检测到输入的地址不在可用地址中时。

示例输出应该是:

  data[1] = 11
data[2] = 22
data[3] = 33
data[4] = 44

address[1] = 2538816
address[2] = 2538820
address[3] = 2538824
address[4] = 2538828

enter address: 2538888
Invalid Input!

我已经创建了代码,它可以工作,但它给了我一个警告,因为我转换错了(而且我知道转换不适合我的需要)。我唯一关注的是:

  • 用户从可用地址中输入一个地址到一个 int 变量。
  • 应将用户输入的地址与可用地址进行比较。 (这就是问题所在)
  • 如果输入的地址在可用地址中,则用户将更改存储在用户输入的地址上的值。
  • 如果不是,程序应该显示 Invalid Input!

此外,程序的一个要求是,当“程序要求用户输入一个地址时。地址存储在一个临时的 int 变量中,然后复制到整数指针。”

main()
{
int var = 4, temp;
int data[5]={11, 22, 33, 44};
int* pVar;
pVar = &var;
char choice;
void display(int, int*);

while(1)
{
display(var,data);

while(1)
{
printf("\nEnter address: ");
scanf("%d", &temp);
int check=0;

for(int i=0; i<4; i++)
{
if((int*)temp==&data[i])
{
check=1;
break;
}
}
if(check==1)
{
*pVar = temp;
break;
}
else
{
printf("Invalid Input!\n");
}
}

printf("Enter integer: ");
scanf("%d", *pVar);

display(var,data);

while(1)
{
getchar();
printf("\n\nDo you want to restart? [Y] Yes or [N] No: ");
scanf("%c", &choice);

if(choice=='Y'||choice=='y'||choice=='N'||choice=='n')
{
break;
}
else
{
printf("Invalid Input!\n");
}
}

if(choice=='N'||choice=='n')
{
break;
}
}//endline13
system("PAUSE");
}

void display(int var, int data[4])
{
system("cls");
printf("Values---------------------------*\n\n");
printf("var = %d\n\n", var);

for(int i=0; i<4; i++)
{
printf("data[%i] = %i\n", i, data[i]);
}

printf("\nAddresses---------------------------*\n\n");
printf("Address of variable = %d\n\n", &var);

for(int i=0; i<4; i++)
{
printf("Address of data[%i] = %i\n", i, &data[i]);
}
}

最佳答案

您需要做的是让用户输入一个数字,并将其解释为一个指针。首先你必须检查指针,接下来你必须使用它。如果需要将数字解释为指针,则需要进行类型转换。为了让您自己更轻松,您应该这样做一次,并将结果用于检查和分配。

int temp;
scanf("%d", &temp);

现在您在 temp 中有了地址。首先将 this 类型转换为指针;

int *tempptr;
tempptr = (int*)temp; // compiler will issue a warning for this.

请注意,这仅在 int 的大小与 int * 的大小相同时才有效,如果不是,则可能会生成编译器错误:

#if sizeof(int) != sizeof(int *)
#error cannot typecast int to int *
#endif

我相信您检查的方式是正确的,但您现在可以改用 tempptr

//if((int*)temp == &data[i])
if ( tempptr == &data[i])

这很奇怪:

int var = 4;
int* pVar;
pVar = &var;
*pVar = temp; // this means: var = temp

在这里,您不再将 temp 用作指针,而是再次用作整数。如果您使用 tempptr,则不需要 pVarvar

scanf 可能会做您需要的,但是当您进行隐式类型转换时它会非常困惑;

 scanf("%d", *pVar); 

*pVar 是一个 int,但 scanf 需要一个 int *。如果你真的想要这个,它需要一个体面的评论,向阅读代码的其他人解释你在这里做什么。没有它,其他任何人都会简单地将此行标记为错误。

如果您改用 tempptr,则使用 int *,而 scanf 需要 int *

 scanf("%d", tempptr); 

关于比较一个整数和一个变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26689121/

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