为什么单个指针的行为类似于数组,而解引用运算符(*)不是´;不需要访问指向的元素吗? int*insertZeroPosition(int*pf,int n,int k){ int*ptr=(int*)calloc(n+1,sizeof(int)); int i; ptr[0]=k; 对于(i=1;i

为什么单个指针的行为类似于数组,而解引用运算符(*)不是´;不需要访问指向的元素吗? int*insertZeroPosition(int*pf,int n,int k){ int*ptr=(int*)calloc(n+1,sizeof(int)); int i; ptr[0]=k; 对于(i=1;i,c,arrays,function,pointers,C,Arrays,Function,Pointers,而言,语法p[i]相当于*(p+i)。即使使用数组下标语法,解引用仍然存在 C标准,§6.5.2.1.2: 下标运算符[]的定义 E1[E2]与(*(E1)+(E2))相同 如果你愿意,你可以重写代码说:*(ptr+i)=*pf,没有区别。什么是指针操作?ptr[x]相当于*(ptr+x)。这确实是一个基本的语法问题。这回答了你的问题吗?因为ptr[i]与*(ptr+i)完全相同,你也可以说i[ptr],这会让人觉得很奇怪:-)@RobertS说,它们是一样的,因为语言是这样说的。数组在C中不是

而言,语法
p[i]
相当于
*(p+i)
。即使使用数组下标语法,解引用仍然存在

C标准,§6.5.2.1.2:

下标运算符[]的定义 E1[E2]与(*(E1)+(E2))相同


如果你愿意,你可以重写代码说:
*(ptr+i)=*pf
,没有区别。

什么是指针操作?
ptr[x]
相当于
*(ptr+x)
。这确实是一个基本的语法问题。这回答了你的问题吗?因为
ptr[i]
*(ptr+i)完全相同
,你也可以说
i[ptr]
,这会让人觉得很奇怪:-)@RobertS说,它们是一样的,因为语言是这样说的。数组在C中不是一流的数据类型——尽管它们在其他语言中是这样的——我不知道如何解释得更详细。C定义了数组访问符号,用的是去引用指针加索引。现在确实是
ptr[I]
(ptr+I)
不是一回事-第一个访问数组中的元素,而第二个只计算地址,但添加差异
*(ptr+i)
访问元素。
int *insertZeroPosition(int *pf,int n,int k){
    int *ptr=(int *)calloc(n+1,sizeof(int));
    int i;
    ptr[0]=k;
    for (i=1;i<n+1;i++,pf++){
        ptr[i]=*pf; 
    }
    return ptr;
}