質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

1733閲覧

C言語 配列の表示について

north_redwings

総合スコア32

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/04/27 05:27

C言語を久しぶりに触ったものです。
復習がてら、配列の要素をfor文で表示するプログラムを書いてみたところ、要素数がしっかり反映されませんでした。

C

1#include<stdio.h> 2 3void print_list(int x[]){ 4 5 int size; 6 printf("sizeof(x) is %d\n", sizeof(x)); 7 size = sizeof(x) / sizeof(int); 8 printf("sizeof(int) is %d\n", sizeof(int)); 9 printf("size is %d\n", size); 10 for(int i=0; i<size;i++){ 11 printf("x[%d] = %d\n",i, x[i]); 12 } 13} 14 15int main(){ 16 int x[5] = {1,2,3,4,5}; 17 print_list(x); 18} 19

terminalでの表示は以下のとおりです。

sizeof(x) is 8 sizeof(int) is 4 size is 2 x[0] = 1 x[1] = 2

環境はubuntu 16.04 LTS 64bitです。
もし他に必要な情報がございましたコメントよろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

参考情報として。

手元で試してみましたところ、コンパイル時にしっかり警告出ましたね。

Plain

1$ gcc --version 2gcc (GCC) 6.4.0 3(Copyright略) 4$ gcc sample.c 5sample.c: 関数 ‘print_list’ 内: 6sample.c:5:36: 警告: ‘sizeof’ on array function parameter ‘x’ will return size of ‘int *’ [-Wsizeof-array-argument] 7 printf("sizeof(x) is %d\n", sizeof(x)); 8 ^ 9sample.c:3:21: 備考: ここで宣言されています 10 void print_list(int x[]){ 11 ^ 12sample.c:6:15: 警告: ‘sizeof’ on array function parameter ‘x’ will return size of ‘int *’ [-Wsizeof-array-argument] 13 size = sizeof(x) / sizeof(int); 14 ^ 15sample.c:3:21: 備考: ここで宣言されています 16 void print_list(int x[]){

投稿2018/04/27 05:45

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

sizeof は、配列の要素数を明示しないと正しい値を返しません

extern int x[];

という定義だと sizeof(x) は int* のサイズしか返しません

投稿2018/04/27 05:35

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

配列を関数に渡すと、配列へのポインタに自動的に読み替えられてしまうのです。
関数に要素数を一緒に渡すのが定石です。

C

1#include<stdio.h> 2 3void print_list(int x[], int size){ 4 for(int i=0; i<size;i++){ 5 printf("x[%d] = %d\n",i, x[i]); 6 } 7} 8 9int main(){ 10 int x[5] = {1,2,3,4,5}; 11 print_list(x, sizeof(x) / sizeof(int)); 12}

投稿2018/04/27 05:30

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

north_redwings

2018/04/27 05:32

迅速な回答ありがとうございます。 そうでしたね、、、しばらくPythonを勉強していたせいかポインタに関しての知識が抜けていました、、、ありがとうございます????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問