(C言語) 配列宣言の仕方([] *)
C言語の配列
c言語の配列で1年弱でようやく理解したのでまとめました。
- 配列のキャストについて
- printf時のフォーマット指定子
配列のキャスト
軽いまとめ
int array≒int* array
char array≒char* array
[] , *をすることでキャストを宣言します。
補足
キャストとは...
なんでも入ってよい箱(配列,変数)ではなく、専用の箱を作るイメージ
この箱には整数のみ、この箱には小数のみetc...
なぜ≒なのかは下の記事について詳しく書きます。
じゃあなかったらどうなるの??
char array="abcd";で宣言をする
void main(){ //#include <stdio.h>をしています char array="abcd"; printf("%s",array); }
結果
test.c: In function ‘main’: test.c:6:16: warning: initialization of ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversio ] 3 | char array = "abcd"; | ^~~~~~
これはキャストされていないことを意味し、おいおい1文字しか受け付けないところに2文字以上入れるなよ的な感じです。
ここでchar array[]またはchar* array にすることでキャストされうまく実行いたします。
void main(){ char array1[]="abcd"; //[]でキャスト char* array2="abcd"; //*でキャスト printf("%s",array1); printf("%s",array2); }
結果
abcd abcd
printfの%d,%c,%sの違い
%d,%cはそれぞれ一文字の数字と文字対応 %sは文字列に対応
簡単じゃんと思うかもしれないが、変数の指定の仕方に注意。。。
char* array="abcd"; printf("%c\n",*array);//*あり printf("%s\n",array);//*なし
結果
a abcd
array=array[0]を意味します。 もし2番目のbを取り出したければ(array+1) or array[1]することでうまくいきます。
char* array="abcd"; printf("%c\n",*(array+1));//*あり printf("%c\n",array[1]);//*なし
結果
b b
このように配列名は先頭のポインタを指しますがその際*を付けるのか付かないのかで意味が大きく変わってくるので注意が必要です。
まとめ
- 配列を宣言する時は[]または*をつける
- 文字列を表示する時は*なし。1文字のみの時は*あり。