[英]Pointer returning memory address?
我正在使用在主程序中扫描数字的程序。 之后,该程序将调用函数change_number(),并作为参数给出数字的存储地址。 此程序后,应在子程序中的数字上加3,然后在子程序中将其打印出来并恢复该新值。 但是,当尝试在子程序change_number()中打印出该数字时,它将打印出它的内存地址。 我的理解是,当使用*-表示法或仅通过插入变量名来引用指针时,程序应返回整数值。 我尝试过的另一个编译器说以下错误消息,甚至没有使用x-注释或* pointer_x-注释进行编译:
我不明白,因为我的指针是作为整数引入的,就像整数本身一样。 这是代码:
#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;
因为x
和pointer_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
而*x
是int
。
因此,您需要更改以下内容:
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.