今天复习指针时在输入和输出时对*p和p还是难以辨认,经过参考一些大佬的资料与研究后,总结了一些,如下:
就拿在一个数组中输入和输出10个数举例:
代码如下:
#include <stdio.h>
int main()
{
int i, a[10];
int* p = a;
for (p; p < (a + 10); ++p)
{
scanf_s("%d", p);
}p = a;
for (p; p < (a + 10); p++)
printf("%d",*p);
}
在这里我们用指针变量p指向了一个数组a[10]的首地址,在输入时,为什么是用p而非*p呢?
首先,p表示一个指针变量的名字,是此指针变量所指向的内存地址,而*p表示此指针变量指向的内存地址所存放的内容,在输入时当然是取地址输入内容然后存放进去。
所以输出时就应该输出*p,即存放的内容,当然,如果是输出p,则会输出地址,与预期结果不符了,对比下面结果就一目了然了。
这是正确的结果
这样只能输入一个结果就结束,调试结果显示异常,但是编译是没问题的,遇到这种情况十分费解
如果是这样的话输出的就是地址了,也得不到想要的结果
当然,作为一个初学者,以上仅是我的个人理解,还望各位指正!