若有说明:int*p,m=5,n;程序scanf("%d,&n");*p=n;为什么错误
时间: 2024-03-14 13:44:19 浏览: 139
这段程序错误的原因是 `scanf()` 函数中的格式字符串参数应该放在双引号内,而这里的双引号没有正确地包含 `%d` 和 `&n`。
应该将程序修改为:
```cpp
int *p, m=5, n;
p = &m;
scanf("%d", &n);
*p = n;
```
这样就能够正确读取用户输入的整数值,并将它赋给指针 `p` 所指向的内存地址,也就是变量 `m`。
另外,需要注意的是,`scanf()` 函数中的格式字符串参数应该和对应的变量类型匹配。在这个例子中,我们使用 `%d` 来读取一个整数值,并且将其存储在变量 `n` 中。然后,我们将 `n` 的值赋给指针 `p` 所指向的内存地址,也就是变量 `m`。
相关问题
若有说明:int *p,m=5,n;以下正确的程序段是()。 A:p=&n;scanf("%d",&p); B:p=&n;scanf("%d",*p) C:scanf("%d",&n);*p=n; D:p=&n;*p=m;
正确的程序段是 A: `p=&n; scanf("%d",&p);`。
解析:
- A选项中,`p=&n`表示将指针p指向n的地址,`scanf("%d",&p)`表示将p指向的地址中存储的值更改为输入的整数值。因此,这段程序可以正常运行。
- B选项中,`p=&n`表示将指针p指向n的地址,`scanf("%d",*p)`表示将p指向的地址中存储的值作为地址,读入一个整数值。这是错误的,因为*p表示p指向的地址中存储的值,而不是地址本身。
- C选项中,`scanf("%d",&n)`表示读入一个整数值并存储到n中,但是*p没有初始化,不能保证其指向一个合法的地址。因此,这段程序会出现错误。
- D选项中,`p=&n`表示将指针p指向n的地址,`*p=m`表示将p指向的地址中存储的值更改为m。这段程序可以正常运行,但与题目意思不符。
若有说明:int*p,m=5,n;程序scanf("%d", &n);*p = n;
这段程序的作用是将用户输入的整数值赋给指针 `p` 所指向的内存地址,也就是变量 `m`。
具体来说,这段程序的执行步骤如下:
1. 定义一个整型指针 `p` 和两个整型变量 `m` 和 `n`,并将变量 `m` 的值初始化为 `5`。
2. 使用 `scanf()` 函数读取用户输入的一个整数值,并将其存储在变量 `n` 中。
3. 将变量 `n` 的值赋给指针 `p` 所指向的内存地址,也就是变量 `m`。
由于指针 `p` 指向了变量 `m` 的地址,因此 `*p` 就等同于 `m`。因此,最后一行代码 `*p = n;` 的作用是将变量 `n` 的值赋给变量 `m`。
综上所述,这段程序是正确的,可以实现将用户输入的整数值赋给变量 `m`。
阅读全文