C言語で、仮引数に char[] a と書くのって、char* a と同じ意味になりますよね?
C言語で、仮引数に char[] a と書くのって、char* a と同じ意味になりますよね? 結局意味するところはポインタ渡しだと思うのですが、後者の書き方に統一して、前者の配列と混同するような書き方はやめるべきなのでしょうか?
char[] a ではなくて、char a[] でした。
C言語関連・182閲覧
ベストアンサー
int func(int n, int array[]){ int sum=0; for(int i=0;i<n;i++){ sum+=array[i]; } return sum; } であれば、引数は配列であるという意図を明確に出来るし、 void swap(int*a, int*b){ int tmp=*b; *b=*a; *a=tmp; } であればvoid swap(int a[], int b[])と書くべきではない。 統一するのではなく、使い分けるべき、では。 (なんか下の方のやりとりで「配列へのポインタ」という言葉が出ているけど、int (*)[5] みたいなものとの混乱はないですよね?)
1人がナイス!しています
> なんか下の方のやりとりで「配列へのポインタ」という言葉が出ているけど、int (*)[5] みたいなものとの混乱はないですよね? 混乱してました! 仮引数に書かれた int* a や int a[] は、実引数が配列であろうとなんであろうと、関数内では int型へのポインタ以外の何物でもないのですね。 実行時に型情報が保存されていないので、関数内では a が int 型へのポインタである、という以上の情報を知るすべはないのですね。 (結局のところ「ポインタの配列へのポインタ」でも、「配列へのポインタ」でもない)
質問者からのお礼コメント
ありがとうございました!
お礼日時:5/25 5:50