比较整数和变量的地址

时间:2014-11-01 12:04:13

标签: c pointers integer compare

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

程序必须具有带初始化值的数组。程序应显示值的值和地址。然后程序要求用户输入用户想要更改的值的地址。我想显示一条错误消息,如" 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变量输入地址。
  • 应将用户输入的地址与可用地址进行比较。 (这是问题)
  • 如果输入的地址属于可用的地址,则用户将更改存储在用户输入的地址上的值。
  • 如果没有,程序应显示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]);
        }
}

1 个答案:

答案 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,则不需要pVarvar

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

 scanf("%d", *pVar); 

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

如果您使用tempptr,则使用int *,其中scanf需要int *

 scanf("%d", tempptr);