我需要有关如何将变量的地址与整数进行比较的帮助。 //或将指针与整数进行比较的情况.//
程序必须具有带初始化值的数组。程序应显示值的值和地址。然后程序要求用户输入用户想要更改的值的地址。我想显示一条错误消息,如" Invalid Input!"当程序检测到输入的地址不在可用地址中时。
示例输出应为:
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变量中,然后复制到整数指针。"
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]);
}
}
答案 0 :(得分:2)
您需要做的是让用户输入一个数字,并将其解释为指针。首先你必须检查指针,接下来你必须使用它。如果需要将数字解释为指针,则需要进行类型转换。为了使自己更容易,您应该执行一次,并将结果用于检查和分配。
int temp;
scanf("%d", &temp);
现在您的地址位于temp
。首先将其转换为指针;
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
,则不需要pVar
和var
。
scanf
可能会做你需要的,但是当你进行隐式的类型转换时,它会非常混乱;
scanf("%d", *pVar);
*pVar
是一个int,但scanf
需要int *
。如果你真的想要这个,它需要一个体面的评论解释给那些阅读代码你在这里做的人。没有它,任何人都会将此行标记为错误。
如果您使用tempptr,则使用int *
,其中scanf需要int *
scanf("%d", tempptr);