2017-05-08 316 views
0

我试图使用严格指针算术将数值从一个数组复制到另一个数组。这是我现在的代码:如何使用指针算术将数组中的值从一个数组复制到另一个数组

int *p; 
    int arraySize = 20; 

    int array[arraySize];  

    for (p = array; p< array+(sizeof(array)/sizeof(int)); p++){ 
     int random = rand() % 200; 
     *p = random; 
    } 

    for (p = array; p< array+(sizeof(array)/sizeof(int)); p++){ 
     printf("%d\t%x\n", *p, p); 
    } 

    //the code above works fine 

    printf("\n"); 

    //grow the new array by one to insert value at end later 
    int array2[(arraySize+1)]; 

    int *p2; 

    for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){ 
     *(p2) = *(p); 
    } 

    for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){ 
     printf("%d\t%x\n", *p2, p2); 
    } 

但是,当我运行代码所有输出在每个内存位置是0。我做错了什么是防止值被复制过来?

+1

“p”不会递增。 –

+0

你的代码存在的问题是它改变了'p2',但它永远不会改变'p'。投票结束为错字。 – dasblinkenlight

+0

做p ++给出的随机数与一些零混合在内存位置输出 – theplaid

回答

1

你的问题是,在这个循环,你打算以复制*p*p2

for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){ 
    *(p2) = *(p); 
} 

你增加p2但从未递增p,你永远不重置p重新指向的array开始。在此循环的开始处,p指向array末尾的位置。将您的循环更改为:

for(p2 = array2, p = array; p2 < array2 + (sizeof(array2)/sizeof(int)) - 1; p2++, ++p){ 
    *(p2) = *(p); 
} 
相关问题