首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用按位C

使用按位C
EN

Stack Overflow用户
提问于 2014-03-09 20:30:44
回答 3查看 127关注 0票数 0

对于这个部分,我只需要将一个值扫描到一个变量中,然后把它放到一个方程中,然后输出一个数字。

代码语言:javascript
复制
Analogue input (-5V to 5V):
1
e is -1073750280

守则:

代码语言:javascript
复制
printf("Analogue input (-5V -5V):\n");
scanf("%d",e);
printf("e is: %d \n", e);

当我每次运行程序时,e打印出来的数字随着变化而变化。我想这与记忆有关,但我想不出是什么。

这些是变量声明:

代码语言:javascript
复制
uint16_t *pointer;
int e,d,i;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-09 20:45:30

C按值传递其所有函数参数,而不是引用。这意味着函数不能直接修改其参数:

代码语言:javascript
复制
void NoChange(int i) {
  printf("Before: %d\n", i);
  i = 10;  // Changes only the local copy of the variable.
  printf("After: %d\n", i);
}
main() {
  int n = 1;
  printf("Start: %d\n", n);
  NoChange(n);
  printf("End: %d\n", n);
}

输出:

代码语言:javascript
复制
Start: 1
Before: 1
After: 10
End: 1

如果希望函数更改变量的内容,则需要传递其地址。然后,函数可以修改该地址上的数据,从而有效地修改变量:

代码语言:javascript
复制
void Change(int *i) {
  printf("Before: %d\n", *i);
  *i = 10;  // Changes the memory that i points to.
  printf("After: %d\n", *i);
}
main() {
  int n = 1;
  printf("Start: %d\n", n);
  Change(n);
  printf("End: %d\n", n);
}

输出:

代码语言:javascript
复制
Start: 1
Before: 1
After: 10
End: 10

因此,为了使scanf()函数将数据存储在变量中,需要将该变量的地址传递给它,如下所示:

代码语言:javascript
复制
int e;
scanf("%d", &e);
票数 1
EN

Stack Overflow用户

发布于 2014-03-09 20:37:17

正如其他人所指出的,scanf("%d", &e);是正确的答案。scanf函数需要一个指向您希望它存储数据的位置的指针,否则它不知道变量在哪里。

由于scanf需要一个指针,所以它将存储在e中的未初始化值转换为指针,并将结果存储在那里。这是一种未定义的行为,你会在C/C++部分中经常看到这个短语,你不应该这么做。

而且,由于scanf没有对您的变量做任何操作,所以printf正在打印未初始化的e值,这就是为什么您要得到意外的结果。

票数 1
EN

Stack Overflow用户

发布于 2014-03-09 20:35:12

代码语言:javascript
复制
scanf("%d",&e);

你失踪了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22287747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档