🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

Q&A

解決済

2回答

392閲覧

c言語の2次元配列について

yukikona

総合スコア12

C

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

0グッド

0クリップ

投稿2019/11/30 06:43

前提・実現したいこと

c言語について、travel_[n][n]={
{0,7,3,0,0,0},
{7,0,5,7,0,0},
{3,5,0,6,4,0},
{0,7,6,0,3,9},
{0,0,4,3,0,8},
{0,0,0,9,8,0}};
という2次元配列をn=6とし可変なものとして定義したいです。

発生している問題・エラーメッセージ

test1.c:16:19: error: expected expression travel_[n][n]={

該当のソースコード

c

1#include<stdio.h> 2#include<stdlib.h> 3 4int main (void){ 5 int n=6; 6 int **travel_; 7 travel_=malloc(sizeof(int *) * n); 8 for(int i = 0; i < n;i++){ 9 travel_[i]=malloc(sizeof(int) * n); 10 } 11 for(int i = 0; i < n; i++) { 12 for(int j = 0; j < n; j++) { 13 travel_[i][j] = 0; // 初期化 14 } 15 } 16 travel_[n][n]={ 17 {0,7,3,0,0,0}, 18 {7,0,5,7,0,0}, 19 {3,5,0,6,4,0}, 20 {0,7,6,0,3,9}, 21 {0,0,4,3,0,8}, 22 {0,0,0,9,8,0}}; 23 for(int l=0;l<n;l++){ 24 for(int k=0;k<n;k++){ 25 printf("[%d]",travel_[l][k]); 26 } 27 printf("\n"); 28 } 29 for(int i = 0; i < n; i++) { 30 free(travel_[i]); 31 } 32 free(travel_); 33}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

可変定義(とゆーのかw)の配列は、コードで初期化しないといけないです

投稿2019/11/30 07:10

編集2019/11/30 07:11
y_waiwai

総合スコア88038

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

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

0

ベストアンサー

Cの規格のオプションで、可変長配列というのがあります。
配列のサイズを宣言時に決められるということであって、一度設定した配列のサイズをあとから変えられるという意味ではないのですが、ともかくそれを使えば質問のようなこと出来ます。
ただし、オプションなので、対応したコンパイラでなければ出来ません。対応しているのはgccまたはclang...それ以外は私は知りません。
追記
可変長配列は初期値を与えるのができなかったんだった...

しかしながら...ソースを見ると、あなたのやりたいのはそういうことですか?
配列にいっぺんに値を設定したい、ということではないかという疑いがふつふつと湧いてくるのですが。(それなら、「出来ません」で終わりですが)

あと、
int **travel_;
これ、Cの文法でいう「二次元配列」つまりarray[][]とは別のものになるのは理解していますか?

投稿2019/11/30 07:18

編集2019/11/30 07:29
thkana

総合スコア7703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問