scanf()的参数和指针
下面是C Primer Puls 的例子的部分:#include<stdio.h>
#include<stdlib.h>
main()
{
int *p;
inti, n;
scanf("%d",&n);
p=(int *)malloc(n*sizeof( int ));
for(i=0;i<n;++i)
{
scanf("%d",&p); //为什么去掉&用p就错了指针变量p储存的不就是地址吗
} //但是用p++或者p+i 的形式是对的(能运行) 请详解谢谢
free(p);
return 0;
} p是指针,p自身在内存中有地址
p指向哪里?p的值为所指向内容的地址
p 以数组的形式获取 值
&p 以数组的形式存储内容 p 只是一个数组,并不是指针。 因为p是个指针变量而不是指针数组。如果p指向的是一个数组a,p表示的是数组a的第i个元素。p+i这是数组第i个元素的地址。*(p+i)和p是一个意思,相应的p+i和&p是一个意思 指针变量p存储的是地址,但是不能直接拿变量当地址啊, major_lyu 发表于 2020-2-27 15:57
因为p是个指针变量而不是指针数组。如果p指向的是一个数组a,p表示的是数组a的第i个元素。p+i这是数组第i个 ...
p表示的是数组a的第i个元素的地址 本帖最后由 良弓无箭 于 2020-2-27 18:43 编辑
#include<stdio.h>
#include<stdlib.h>
main()
{
int *p;
inti, n;
scanf("%d",&n);
p=(int *)malloc(n*sizeof( int ));
for(i=0;i<n;++i)
{
scanf("%d",&p); //怎么说呢,p相当于*(p+i),相当于把p中存的值取了出来,并不是地址。 scanf中需要的参数是地址。
//p是你申请的一系列动态内存的首地址。p++指向下一个内存单元。p+i指向第i个内存单元。而&p也是指向第i个内存单元。
free(p);
return 0;
}
页:
[1]