- 締切済み
助けてください ポインタと配列
#include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 0}; int i, *ptr; ptr = &a[0]; while (*ptr!= 0){ if(*ptr!=0) *ptr=0; } for (i = 0; i < 5; i++) printf("a[%d]=%2d &a[%d]=%p\n",i,a[i],i,ptr); // 配列aの値とアドレスを表示せよ putchar('\n'); ptr = &a[0]; for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n",*ptr,ptr); ; } // ポインタptr を使用して、修正後の配列aの値とアドレスを表示せよ printf("\n"); return (0); } /* 処理結果 a[0]= 0 &a[0]=0013FF3C a[1]= 2 &a[1]=0013FF3C a[2]= 3 &a[2]=0013FF3C a[3]= 4 &a[3]=0013FF3C a[4]= 0 &a[4]=0013FF3C ptr値 =0 ptrアドレス =0013FF3C ptr値 =0 ptrアドレス =0013FF3C ptr値 =0 ptrアドレス =0013FF3C ptr値 =0 ptrアドレス =0013FF3C ptr値 =0 ptrアドレス =0013FF3C 続行するには何かキーを押してください . . .*/ 一次元配列a[]の一番目の要素以外を0にするプログラムを作成せよ。 ただし、最後の要素は0とする。 上記の問題文とこの結果は合致しているでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- JIF0131
- ベストアンサー率50% (1/2)
正しいかどうか分かりませんが・・・・ #include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 0}; int i, *ptr; ptr = &a[0]; for(i=0;i<5;i++){ if(i!=0 && *(ptr+i)!=0){ *(ptr+i)=0; } } for (i = 0; i < 5; i++) printf("a[%d]=%2d &a[%d]=%p\n",i,a[i],i,(a+i)); // 配列aの値とアドレスを表示せよ putchar('\n'); ptr = &a[0]; for (i = 0; i < 5; i++){ printf("(ptr+%d)の値 =%d ptrアドレス =%p \n",i,*(ptr+i),(ptr+i)); } // ポインタptr を使用して、修正後の配列aの値とアドレスを表示せよ printf("\n"); return (0); } 問題文が >一次元配列a[]の一番目の要素以外を0にするプログラムを作成せよ。 >ただし、最後の要素は0とする。 なので最初の要素以外を0にして↓ for(i=0;i<5;i++){ //最初の添字( a[0] )は除きptr[i]が0でないとき0にする if(i!=0 && *(ptr+i)!=0){ *(ptr+i)=0; } } 正しいかどうかの保証はないので参考程度でお願いします・・・
お礼
ありがとうございました^^