printf 返回 6422044 作为变量的值
printf returning 6422044 for the value of variable
问题
基本上,我有一个简单的 C 代码来 return 变量的值,但是,如果我更改 scanf()
的 &
和 [=33] 的 printf =]ed 变量的值已更改。这个事件的技术解释是什么?
(输入: 3) printf returning: 3
#include <stdio.h>
#include <stdlib.h>
void main(){
int x = 1;
scanf("%d", &x);
printf("%d", x);
}
(输入: 3) printf returning: 6422044
#include <stdio.h>
#include <stdlib.h>
void main(){
int x = 1;
scanf("%d", &x);
printf("%d", &x);
}
(输入:3)printf returning:(无)
#include <stdio.h>
#include <stdlib.h>
void main(){
int x = 1;
scanf("%d", x);
printf("%d", &x);
}
第一个代码很简单。您将值存储在 x 的地址中,因此您提到 &x
并且您可以通过 x 访问该值。
在第二个代码中,您获得了我上面提到的值。在 printf 语句中,您正在打印 x.
的地址
基本上&
指的是地址你在学习概念的时候会看到很多Pointer.
使用 printf("%d", &x);
,您传递 x
的地址,其中 printf
需要 int
。当您这样做时,C 标准没有定义行为。一个常见的结果是该地址或其中的一部分被解释为 int
并打印出来,因此 6422044 可能是内存中 x
地址的一部分。
使用 scanf("%d", x);
,您传递 x
的 int
值,1,其中 scanf
需要 int
的地址。当您这样做时,C 标准没有定义行为。一个常见的结果是 int
被重新解释为地址并且 scanf
尝试写入该地址。地址 1 可能未映射为您的进程可访问,从而导致您的进程终止。这将导致进程没有输出,并且还应该导致一些关于程序终止的错误消息。如果您在 IDE 中执行程序,您可能会错过这个。
只需将 printf("%d", &x);
中的 &
删除,它一定会解决您的问题。
问题
基本上,我有一个简单的 C 代码来 return 变量的值,但是,如果我更改 scanf()
的 &
和 [=33] 的 printf =]ed 变量的值已更改。这个事件的技术解释是什么?
(输入: 3) printf returning: 3
#include <stdio.h>
#include <stdlib.h>
void main(){
int x = 1;
scanf("%d", &x);
printf("%d", x);
}
(输入: 3) printf returning: 6422044
#include <stdio.h>
#include <stdlib.h>
void main(){
int x = 1;
scanf("%d", &x);
printf("%d", &x);
}
(输入:3)printf returning:(无)
#include <stdio.h>
#include <stdlib.h>
void main(){
int x = 1;
scanf("%d", x);
printf("%d", &x);
}
第一个代码很简单。您将值存储在 x 的地址中,因此您提到 &x
并且您可以通过 x 访问该值。
在第二个代码中,您获得了我上面提到的值。在 printf 语句中,您正在打印 x.
的地址基本上&
指的是地址你在学习概念的时候会看到很多Pointer.
使用 printf("%d", &x);
,您传递 x
的地址,其中 printf
需要 int
。当您这样做时,C 标准没有定义行为。一个常见的结果是该地址或其中的一部分被解释为 int
并打印出来,因此 6422044 可能是内存中 x
地址的一部分。
使用 scanf("%d", x);
,您传递 x
的 int
值,1,其中 scanf
需要 int
的地址。当您这样做时,C 标准没有定义行为。一个常见的结果是 int
被重新解释为地址并且 scanf
尝试写入该地址。地址 1 可能未映射为您的进程可访问,从而导致您的进程终止。这将导致进程没有输出,并且还应该导致一些关于程序终止的错误消息。如果您在 IDE 中执行程序,您可能会错过这个。
只需将 printf("%d", &x);
中的 &
删除,它一定会解决您的问题。