#include<stdio.h>
int main() {
int i;
int vector[5]={6,17,28,39,410},*r; //variables declaration
r=(int*)&vector; //pointer declaration
for (i = 0; i<5;i++){ //print the array in using a loop
printf("%d ",vector[i]);
}
printf("\n\n");
for(i=0;i<5;i++){ //print the array in reverse order using a loop
vector[i] = *(r+4-i); //it should be from the last to the first but it prints it
printf("%d ",vector[i]); //differently, see below
}
return 0;}
应该是:
6 17 28 39 410
410 39 28 17 6
但结果是:
6 17 28 39 410
410 39 28 39 410
最后两个应该是17 6
答案 0 :(得分:4)
在阅读之前,您正在覆盖您尝试阅读的数据。
只需写出代码手动执行的步骤,您就会看到它。
要进行原位反转,必须交换值,以避免覆盖。
另请注意,在适当的上下文中,数组的名称将计算为指向第一个参数的指针。所以这个:
r=(int*)&vector;
很多更好地写成:
r = vector;
你应该真的避免演员阵容,你的演员表是完全没必要的。
答案 1 :(得分:1)
试试这个:
#include<stdio.h>
int main() {
int i;
int vector[5]={6,17,28,39,410},*r; //variables declaration
r=(int*)&vector; //pointer declaration
for (i = 0; i<5;i++){ //print the array in using a loop
printf("%d ",vector[i]);
}
printf("\n\n");
for(i=0;i<5;i++){ //print the array in reverse order using a loop
//it should be from the last to the first but it prints it
printf("%d ",*(r+4-i)); //differently, see below
}
return ( 0 );
}
答案 2 :(得分:0)
在您的代码中,您正在更改前两个值。所以前两步你的阵列 会是这样的。
410 39 28 39 410
继续循环后,它将获得替换值。您可以将替换的值存储在另一个数组中。
for(i=0,j=4;i<j;i++,j--){
temp=vector[i]; // storing the value in temporary variable
vector[i] = r[j];
r[j]=temp; // assigning the value .
}
for ( i=0; i < 5 ; i ++ )
printf("%d\n",vector[i]);