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

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

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

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

Q&A

解決済

2回答

1229閲覧

C言語の変数定義で用いる"***"について教えてください。

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2016/02/06 02:31

編集2016/02/06 02:58

###前提・実現したいこと
プログラム改修のためにC言語のソースコードを読んでいますが
main.c冒頭で定義されている"***"の動作がわかりません。
WEBで検索しましたが、解説している文献に辿りつけなかったため
この場をお借りして質問させていただきました。

不慣れなため、情報提供に不備があるかもしれません。
必要な情報があれば、ご教示いただけると幸いです。

###ソースコード

C

1/* 2 * main.pc 3 * driver for the tpcc transactions 4 */ 5 6#include文は省略 7 8/* Global SQL Variables */ 9MYSQL **ctx; 10MYSQL_STMT ***stmt;

###補足情報(言語/FW/ツール等のバージョンなど)
C言語

以上、よろしくお願いいたします。

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

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

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

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

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

Chironian

2016/02/06 02:44

それだけでは考えられる可能性が多すぎて回答しづらいです。どんな状況で何に困っているのでしょうか?
退会済みユーザー

退会済みユーザー

2016/02/06 02:46

失礼しました。複数の用途があるのですね。プログラム改修のためにソースコードを読んでいたのですが、変数定義と思われる箇所で使われており、動作を理解できず困っていました。
Chironian

2016/02/06 04:44

席を外してたので出遅れちゃいました。"***"と記述するとC言語では単なる文字列ですね。引用符には要注意です。
退会済みユーザー

退会済みユーザー

2016/02/06 04:46

ありがとうございます。たしかにそのとおりですね。気をつけます。
guest

回答2

0

こういうことは実際に組んで試すのが一番早いです。
「***」の機能を表す一番単純なプログラムを組んでみると、たとえばこのようなコードになります。

C

1#include<stdio.h> 2 3int main(int argc, char **argv) 4{ 5 int i = 123; 6 int *i1 = &i; 7 int **i2 = &i1; 8 int ***i3 = &i2; 9 10 printf( "%d\n", i ); 11 printf( "%d\n", *i1 ); 12 printf( "%d\n", **i2 ); 13 printf( "%d\n", ***i3 ); 14 15 return 0; 16}

実行結果は以下のようになります。

bash

1$ gcc -o sample sample.c 2$ ./sample 3123 4123 5123 6123 7$

以上のプログラムで何か不明な点ありますか?

投稿2016/02/06 03:15

kozuchi

総合スコア1193

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

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

退会済みユーザー

退会済みユーザー

2016/02/06 03:24

疑問がクリアになりました。sampleプログラムに不明な点はありません。 模範例まで掲載いただきありがとうございました。
guest

0

ベストアンサー

「ポインタのポインタのポインタ」としかお答えできないのですが。

C

1int a; 2int *p; 3int **pp; 4int ***ppp; 5p = &a; 6pp = &p; 7ppp = &pp;

C言語ではポインタはある変数のアドレスを指すこともあれば動的に確保したメモリ領域を指すこともあり、配列の先頭アドレスを指すことにも使われています。三重のポインタは複雑なデータ構造だろうということは判りますが、どのように使っているのかはソースコードを読まない限り判りません。

投稿2016/02/06 03:10

catsforepaw

総合スコア5938

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

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

退会済みユーザー

退会済みユーザー

2016/02/06 03:14

"**"がポインタのポインタであることは存じてましたが、"***"に特別な意味があるわけではないのですね。迅速なご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問