【发布时间】:2014-05-30 11:50:27
【问题描述】:
指针对我来说是新事物,我正在努力理解它,但我不会屈服并希望学习它。
scanf ("%d", *p) 和 scanf ("%d", p) 之间有什么区别?
在示例中,我看到如果我想在变量中输入一些值,我应该使用scanf ("%d", p)。这对我来说没有意义。不应该是scanf ("%d", *p)吗?
我将其解释为:“在指针指向的地方放置一些整数值”,例如它指向变量x,然后它应该是x = 10,但事实并非如此。那么如何使用scanf() 和指针来设置数组中的值呢?
我在哪里以及哪里做错了?我正在尝试使用 C 语言来学习这一点,因为它是我应该在课堂上使用的语言。
例如:
#include <stdio.h>
int main () {
float x[10], *p;
int i;
p = &x[0];
for (i = 0; i < 10; i++) {
scanf("%d", p + i);
}
for (i = 0; i < 10; i++) {
printf("%d", *(p + i));
}
return 0;
}
为什么只有p + i 在第一个for () {} 和*(p + i) 在第二个循环?我会将*(p + i) 也放在第一个for () {} 中。 *(p + i) 对我来说就像:“第 (p+i) 个元素是什么并使其等于某个值”。
【问题讨论】:
-
也许你应该添加类型...
-
什么是
p?如果p不是指针,则应使用scanf ("%d", &p) -
顺便说一句:在使用希望读取的内容之前检查
scanf()的返回值。scanf("%d", p + i) != 1) Oops(); -
如果
p是一个指针,那么p的值就是“指针指向的地方”。*p将是“被指向的东西”。 -
scanf("%d", &x[i]);会更容易写和理解
标签: c arrays pointers dereference