ganon
@ganon

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ポインタで逆順

Q&A

Closed

出力で6,5,4,3,2,1としたいのですがうまく逆順になりません。なぜでしょうか。

#include<stdio.h>
int main(){
    int v[6]={1,2,3,4,5,6};
    int *p,*q;
    p=&v[0];
    q=&v[5];
    while(1){
        int *temp;
        temp=q;
        q=p;
        p=temp;
        p++;
        q--;
        if(p>q)break;
    }
    for(int i=0;i<6;i++){
        printf("%d\n",v[i]);
    }
}
0

1Answer

理由としては至極単純で,ポインタが指す先の実値を一度も交換していないからです.
提示されたソースコードはpqでポインタの値をやり取りしているだけなので,配列に格納されている実値には一切手を付けていません.

ポインタの先に格納されている変数の実体を参照するにはどうすればよいか思い出してください.
修正すべき箇所が見えてくるはずです.

0Like

Comments

  1. @ganon

    Questioner

    ポインタをつければ格納されている値を参照し、交換できるというのはわかります。アドレスを交換するだけでは値自体は交換されないということでしょうか?

  2. pとqの値を直接交換しても,それはポインタpとqが指すアドレスが入れ替わっただけなので,元の配列に入っているデータには何ら影響しないということです.

Your answer might help someone💌