繁体   English   中英

指针返回内存地址?

[英]Pointer returning memory address?

我正在使用在主程序中扫描数字的程序。 之后,该程序将调用函数change_number(),并作为参数给出数字的存储地址。 此程序后,应在子程序中的数字上加3,然后在子程序中将其打印出来并恢复该新值。 但是,当尝试在子程序change_number()中打印出该数字时,它将打印出它的内存地址。 我的理解是,当使用*-表示法或仅通过插入变量名来引用指针时,程序应返回整数值。 我尝试过的另一个编译器说以下错误消息,甚至没有使用x-注释或* pointer_x-注释进行编译:

  • “您正在尝试将变量初始化为错误类型的值。code.c:20:警告:来自不兼容指针类型的赋值”。

我不明白,因为我的指针是作为整数引入的,就像整数本身一样。 这是代码:

#include<stdio.h>

void change_number(int *x);

int main()
{

    int x;
    printf("Give number x: ");
    scanf("%d", &x);
    printf("In main program: x = %d\n", x);
    change_number(&x);
    printf("In main program: x = %d\n", x);

    return 0;

}

void change_number(int *x)
{

int *pointer_x;
pointer_x = &x;
x = x + 3;
printf("In sub program: x = %d\n", *pointer_x);

}

您粘贴的代码应无法在pointer_x = &x;行上编译pointer_x = &x; 因为xpointer_x均为int*类型

在指针变量上使用address-of运算符可为您提供一个指向指针的指针-在这种情况下, &x产生int**类型

另外,行x = x + 3将指针在内存中的位置提前3*sizeof(int)个字节,这并不修改原始的int变量。

也许您打算改写*x = *x + 3

void change_number(int *x)
{
    int *pointer_x;
    pointer_x = x;
    *x = *x + 3;
    printf("In sub program: x = %d\n", *pointer_x);
}

参数x已经包含来自main的变量x地址,因此必须写为

void change_number(int *x)
{

  int *pointer_x;
  pointer_x = x;
  *x = *x + 3;
  printf("In sub program: x = %d\n", *pointer_x);

}

当您编写void change_number(int *x)x被接收为int * 因此, x指向int*xint

因此,您需要更改以下内容:

pointer_x = x;
*x = *x + 3;
printf("In sub program: x = %d\n", *pointer_x);

现在,此打印正确。 但是要恢复该值,只需在最后添加以下行:

*x = *x - 3;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM