wyybwdq 发表于 2020-2-27 13:35:34

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;
}

ba21 发表于 2020-2-27 13:45:38

p是指针,p自身在内存中有地址
p指向哪里?p的值为所指向内容的地址

p 以数组的形式获取 值
&p 以数组的形式存储内容

zltzlt 发表于 2020-2-27 14:10:18

p 只是一个数组,并不是指针。

major_lyu 发表于 2020-2-27 15:57:09

因为p是个指针变量而不是指针数组。如果p指向的是一个数组a,p表示的是数组a的第i个元素。p+i这是数组第i个元素的地址。*(p+i)和p是一个意思,相应的p+i和&p是一个意思

大河之jian 发表于 2020-2-27 16:33:20

指针变量p存储的是地址,但是不能直接拿变量当地址啊,

大河之jian 发表于 2020-2-27 16:36:34

major_lyu 发表于 2020-2-27 15:57
因为p是个指针变量而不是指针数组。如果p指向的是一个数组a,p表示的是数组a的第i个元素。p+i这是数组第i个 ...

p表示的是数组a的第i个元素的地址

良弓无箭 发表于 2020-2-27 18:42:11

本帖最后由 良弓无箭 于 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]
查看完整版本: scanf()的参数和指针