(C言語) 配列宣言の仕方([] *)

C言語の配列

c言語の配列で1年弱でようやく理解したのでまとめました。

  • 配列のキャストについて
  • printf時のフォーマット指定子

配列のキャスト

軽いまとめ

  • int array≒int* array

  • char array≒char* array

[] , *をすることでキャストを宣言します。

補足
キャストとは...
なんでも入ってよい箱(配列,変数)ではなく、専用の箱を作るイメージ この箱には整数のみ、この箱には小数のみetc...

なぜなのかは下の記事について詳しく書きます。

bluecat314.hatenablog.com



じゃあなかったらどうなるの??

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文字のみの時は*あり