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

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

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

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

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

解決済

2回答

1756閲覧

c言語のポインタの宣言について質問です

mtgjp

総合スコア2

C

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

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

0クリップ

投稿2020/06/02 14:36

編集2020/06/02 14:55

前提・実現したいこと

授業で出てきたプログラムに疑問があります。非常に初歩的ですみません。

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

これはスタックの実装のプログラムなのですが15、26行目などでポインタを引数として使っていますが宣言や初期化はしなくてもいいのでしょうか?

該当のソースコード

c

1#include <stdio.h> 2#include <stdlib.h> 3 4#define SIZE 128 5 6typedef int elemtype; 7 8struct stack{ 9 int top; 10 elemtype elem[SIZE]; 11}; 12 13void push(struct stack *s, elemtype val){ 14 s->top++; 15 if(s->top >= SIZE){ 16 printf("stack overflow\n"); 17 exit(1); 18 }else{ 19 s->elem[s->top] = val; 20 } 21} 22 23elemtype pop(struct stack *s){ 24 elemtype val; 25 if(s->top < 0){ 26 printf("stack underflow\n"); 27 exit(1); 28 }else{ 29 val = s->elem[s->top]; 30 s->top--; 31 return val; 32 } 33} 34 35void initstack(struct stack *s){ 36 s->top = -1; 37} 38 39int stackempty(struct stack *s){ 40 return s->top < 0; 41} 42 43int main(void){ 44 struct stack buf; 45 elemtype e; 46 47 initstack(&buf); 48 49 while(scanf("%d", &e)){ 50 if (e == EOF) break; 51 push(&buf, e); 52 } 53 54 while(!stackempty(&buf)){ 55 printf("%d ", pop(&buf)); 56 } 57 printf("\n"); 58 59 return 0; 60} 61

試したこと

ポインタの授業ノートやポインタに関するサイトは読んだのですが、どこでも宣言と初期化はされていました。

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

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

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

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

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

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

y_waiwai

2020/06/02 14:41

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください んで、15,26行目とはどこのことでしょうか
mtgjp

2020/06/02 14:49

これで大丈夫でしょうか?読みづらくなってしまってすみません!
SHOMI

2020/06/02 14:52 編集

c言語```#include <stdio.h> return 0; } ``` ではなく ```C #include <stdio.h> return 0; } ``` としてください
mtgjp

2020/06/02 14:56

書き方がわからずお手数おかけしました。指摘ありがとうございます! これで大丈夫でしょうか?
guest

回答2

0

授業ノートに「仮引数と実引数」あたりの説明がないか探してみることをお薦めします。

投稿2020/06/02 14:51

Daregada

総合スコア11990

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

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

mtgjp

2020/06/02 14:53

ありがとうございます探してみます
guest

0

ベストアンサー

これはスタックの実装のプログラムなのですが15、26行目などでポインタを引数として使っていますが宣言や初期化はしなくてもいいのでしょうか?

void push(struct stack* s, elemtype val)
elemtype pop(struct stack* s)
sのことでしょうか?
宣言や初期化とはどういう意味で言っていますか?
main関数先頭のstruct stack buf;で確保してinitstack(&buf);で初期化していますよ?

投稿2020/06/02 14:47

編集2020/06/02 14:50
SHOMI

総合スコア4079

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

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

mtgjp

2020/06/02 14:51

*sのことです。ありがとうございます。その部分で用意して初期化されているんですね。無知で申し訳ないです。あとは調べてなんとかできそうです。ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問