C-指向数组的指针:如何将一个指针的值(而不是地址)复制到另一个指针?

C-指向数组的指针:如何将一个指针的值(而不是地址)复制到另一个指针?,c,arrays,pointers,C,Arrays,Pointers,如果指针pr指向数组aa={1,2,3,4,5,0,0,0,0,0},那么我们可以通过指针pr[0],pr[1],pr[2],… 如何移动数组(通过指针操作)以获得{1,1,2,3,4,5,0,0,0,0,0}?显然,pr[i]=pr[i-1]不起作用 这是我的密码: #include <stdio.h> int main() { int aa[10] = {1, 2, 3, 4, 5, 0, 0, 0, 0, 0}; int i, m, *pr = aa;

如果指针
pr
指向数组
aa={1,2,3,4,5,0,0,0,0,0}
,那么我们可以通过指针
pr[0]
pr[1]
pr[2]
,…
如何移动数组(通过指针操作)以获得
{1,1,2,3,4,5,0,0,0,0,0}
?显然,
pr[i]=pr[i-1]
不起作用


这是我的密码:

#include <stdio.h>

int main() {
    int aa[10] = {1, 2, 3, 4, 5, 0, 0, 0, 0, 0};
    int i, m, *pr = aa;
    printf("\n pr[0] = %d, pr[1] = %d, pr[2] = %d, pr[3] = %d", pr[0], pr[1], pr[2], pr[3]);

    for(i = 0; i < 9; i++) {
        m = *(pr + i);
        pr[i+1] = m;
    }

    printf("\n \n pr[0] = %d, pr[1] = %d, pr[2] = %d, pr[3] = %d \n", pr[0], pr[1], pr[2], pr[3]);
    printf("\n \n aa[0] = %d, aa[1] = %d, aa[2] = %d, aa[3] = %d \n", aa[0], aa[1], aa[2], aa[3]);
    return(1);
}
#包括
int main(){
intaa[10]={1,2,3,4,5,0,0,0,0,0};
int i,m,*pr=aa;
printf(“\n pr[0]=%d,pr[1]=%d,pr[2]=%d,pr[3]=%d”,pr[0],pr[1],pr[2],pr[3]);
对于(i=0;i<9;i++){
m=*(pr+i);
pr[i+1]=m;
}
printf(“\n\n pr[0]=%d,pr[1]=%d,pr[2]=%d,pr[3]=%d\n”,pr[0],pr[1],pr[2],pr[3]);
printf(“\n\n aa[0]=%d,aa[1]=%d,aa[2]=%d,aa[3]=%d\n”,aa[0],aa[1],aa[2],aa[3]);
申报表(1);
}

我正在使用
为R编写一个C函数。Call
,C函数中的所有数组都必须通过这种类型的指针进行访问。我对C中指针的语法感到非常困惑。

在示例
1
中,您基本上希望预先添加一个值,然后从数组中删除最后一个值,在示例a
0

如果您看看发生了什么,您将看到以下内容:

position:    0  1  2  3  4  5  6
starting: { a0 a1 a2 a3 a4 a5 a6 }
              \  \  \  \  \  \
final:    { b0 a0 a1 a2 a3 a4 a5 }
因此,您希望按照您建议的方式移动每个值,但必须从末尾开始(否则将用相同的值覆盖所有内容)


如果你想支持这种操作,我建议使用链表。它将在头部插入
O(1)
。据我所知,你想做什么是不可能的,数组的大小大部分是用C语言固定的。你需要制作一个新的数组声音,就像你想要函数
memmove
…或者实现一个循环缓冲区一样。这里没有简单的魔法。memmove不是字符串吗?它也适用于数值吗?
memmove
不限于字符串。它适用于数值。您只需要将元素的数量乘以每个元素的大小。对于字符串,每个元素的大小定义为1。但是对于
int
数组,您可以使用
sizeof(int)
来获取大小。OP中的人员还可以通过颠倒添加到列表中的方式来重新设计数据的存储方式。换句话说,他们可以将1附加到数组的末尾,而不是将1附加到数组的前面,这样数据就可以读取为
5,4,3,2,1,1,0,0,0,0
,尽管这是否可行或是否值得他们花费时间是另一回事,然而,没有什么背景,所以如果OP有一个比这个非常具体的问题更大的问题,他应该问一个不同的问题。
for(i = 9; i > 0; i--) {
    pr[i]=pr[i-1];
}
pr[0] = NEWVALUE;