C 指针返回内存地址?
我正在使用扫描主程序中数字的程序。在此之后,该程序调用函数change_number(),并作为参数给出数字的内存地址。在该程序将子程序中的数字加上3后,在子程序中打印出来并恢复该新值。但是,当尝试在子程序change_number()中打印数字时,它会打印出它的内存地址。我的理解是,当用*-表示法引用指针或仅仅插入变量名时,程序应该返回整数值。我尝试过的另一个编译器显示了以下错误消息,甚至没有使用x表示法或*pointer_x表示法进行编译:C 指针返回内存地址?,c,pointers,memory-address,return-type,C,Pointers,Memory Address,Return Type,我正在使用扫描主程序中数字的程序。在此之后,该程序调用函数change_number(),并作为参数给出数字的内存地址。在该程序将子程序中的数字加上3后,在子程序中打印出来并恢复该新值。但是,当尝试在子程序change_number()中打印数字时,它会打印出它的内存地址。我的理解是,当用*-表示法引用指针或仅仅插入变量名时,程序应该返回整数值。我尝试过的另一个编译器显示了以下错误消息,甚至没有使用x表示法或*pointer_x表示法进行编译: “您试图将变量初始化为错误类型的值。 代码c:2
- “您试图将变量初始化为错误类型的值。 代码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);
}
#包括
无效变更编号(int*x);
int main()
{
int x;
printf(“给出数字x:”);
scanf(“%d”和&x);
printf(“在主程序中:x=%d\n”,x);
更改_编号(&x);
printf(“在主程序中:x=%d\n”,x);
返回0;
}
无效更改编号(int*x)
{
int*pointer_x;
指针x=&x;
x=x+3;
printf(“在子程序中:x=%d\n”,*指针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\u 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;
粘贴的代码在
pointer\ux=&x;行编译失败代码>因为x
和pointer\ux
都是类型int*
在指针变量上使用运算符的地址可以得到指向指针的指针-在本例中,&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);
}