Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指针返回内存地址?_C_Pointers_Memory Address_Return Type - Fatal编程技术网

C 指针返回内存地址?

C 指针返回内存地址?,c,pointers,memory-address,return-type,C,Pointers,Memory Address,Return Type,我正在使用扫描主程序中数字的程序。在此之后,该程序调用函数change_number(),并作为参数给出数字的内存地址。在该程序将子程序中的数字加上3后,在子程序中打印出来并恢复该新值。但是,当尝试在子程序change_number()中打印数字时,它会打印出它的内存地址。我的理解是,当用*-表示法引用指针或仅仅插入变量名时,程序应该返回整数值。我尝试过的另一个编译器显示了以下错误消息,甚至没有使用x表示法或*pointer_x表示法进行编译: “您试图将变量初始化为错误类型的值。 代码c:2

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

  • “您试图将变量初始化为错误类型的值。 代码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);
}