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

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

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

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

Q&A

解決済

3回答

4603閲覧

【C言語】自作関数内でmain関数内の配列を書き換えるには

NeuroScience

総合スコア12

C

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

0グッド

0クリップ

投稿2018/03/27 10:20

前提・実現したいこと

C言語の事で質問です。
main関数で作った配列を他の関数でいじりたいのですが、上手くいきません。何故なのでしょうか?
(ポインタのポインタの扱いにまだ不慣れなもので。。)

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

応答無し→強制終了

該当のソースコード

void test(int **array1){
printf("%d",*array1[0]); // ←値確認
*array1[0] = 0; //←フリーズ
printf("%d",array1[0]);
}

int main(void){
int array[]={1,2,3,4,5};
test(&array);
return 0;
}

試したこと

ダメもとで *(*array1)[0] = 0; ともしてみましたが、これはポインターをつけ忘れていると言われます。
僕の理解が間違っているのでしょうか?

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

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

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

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

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

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

guest

回答3

0

C

1 2void test(int array1[]) 3{ 4 printf("%d",array1[0]); // ←値確認 5 array1[0] = 0; // 6 printf("%d",array1[0]); 7} 8 9int main(void) 10{ 11 int array[]={1,2,3,4,5}; 12 test(array); 13 return 0; 14} 15

こゆのも

投稿2018/03/27 10:37

y_waiwai

総合スコア87747

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

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

NeuroScience

2018/03/27 11:18

その方法もありましたね。ありがとうございます
guest

0

とこれで、これを実行してみましょう。おもしろい結果になります。

c

1#include <stdio.h> 2 3int main(void) { 4 int array[] = {1,2,3,4,5}; 5 printf("%x\n", array); 6 printf("%x\n", &array); 7}

正解はこうです。

c

1#include <stdio.h> 2 3void test(int *array1) { 4 printf("%d\n", array1[0]); 5 array1[0] = 0; 6 printf("%d\n", array1[0]); 7} 8 9int main(void) { 10 int array[] = {1,2,3,4,5}; 11 test(array); 12 return 0; 13}

投稿2018/03/27 10:33

編集2018/03/27 10:55
hichon

総合スコア5737

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

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

0

ベストアンサー

C

1void test(int *array1){ 2 printf("%d\n", array1[0]); // ←値確認 3 array1[0] = 0; //←フリーズ 4 printf("%d\n",array1[0]); 5} 6 7int main(void){ 8 int array[]={1,2,3,4,5}; 9 test(array); 10 return 0; 11}

配列の中身を更新するだけであれば、ダブルポインタにする必要はありません。

投稿2018/03/27 10:25

編集2018/03/27 10:27
kazto

総合スコア7196

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

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

NeuroScience

2018/03/27 10:45

仰る通り、配列の更新だけならダブルポインタにする必要はありませんでしたね。ちょっと混乱が生じてました。 一番早く解答頂けたので、BAにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問