[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 13:42 / Filesize : 213 KB / Number-of Response : 830
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 27



1 名前:デフォルトの名無しさん [2008/04/29(火) 09:44:57 ]
言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 26
pc11.2ch.net/test/read.cgi/tech/1206196600/
過去スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 105代目
pc11.2ch.net/test/read.cgi/tech/1208268461/


655 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:19:00 ]
>>629で終わった話をいつまでグダグダやってるんだ

656 名前:デフォルトの名無しさん [2008/05/12(月) 13:22:59 ]
TEST.Cをコマンドプロンプトで指名してコンパイルする時、拡張子が.Cだとコンパイルできなくて.cだとコンパイルできたんだけど、.Cと.cって違うの?

657 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:26:35 ]
>>656
少なくともそのコンパイラにとっては違うからコンパイルできなかったのだろう。

658 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:05:58 ]
ファイル名の指定を間違ってたんじゃないの
ファイル名の大文字小文字を区別する環境としない環境があるから、それも書いてくれ

659 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:16:09 ]
Sun辺りは.CはC++の拡張子だった希ガス。

660 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:24:22 ]
上の
static const char * const youbi[]
って何でconst2つも付けるのかが分からないんですが
static const char * youbi[] じゃあダメなんですか?

あと、普通の変数でも
static const int const とかやる必要はあるんですか?

661 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:30:52 ]
static const char *youbi[]
youbiの先の文字列が書き換え不可能

static char * const youbi[]
youbiが書き換え不可能

static const char * const youbi[]
両方

662 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:36:31 ]
static const char *youbi[]
 は "火曜日" って文字列を "火曜"

663 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:38:16 ]
途中で書いてしまった

static const char *youbi[]
 は "火曜日" って文字列を "火曜" に変えたりするのが不可能で
static char * const youbi[]
 は youbi[1] に別の文字列のポインタを渡すのが不可能になる

って事なんですか?



664 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:54:23 ]
const char *youbi[] は
const char 型のポインタ(文字列定数)を入れる youbi配列で、新たに文字列定数のポインタを入れることは出来て、
char * const youbi[] は
youbiの中のポインタ変数固定だから、文字列そのものは書き変えられてもポインタの指す先は変えられないって事なんですね

やっと理解出来ました
ありがとうございます

665 名前:デフォルトの名無しさん [2008/05/12(月) 16:40:42 ]
#include<stdio.h>
double f(double x)
{
double y;
y=(((3.1*x-1.8)*x+5.7)*x+1.0)*x-6.2;
return (y);
}
main()
{
double x,y;
int i;
for(i=-20;i<=20;i++){
x=0.5*i;
y=f(x);
printf("x=%7.3f y=%12.3f\n",x,y);
}
}
このプログラムのyの値の総和を計算するプログラムを作れ。
これをだれかお願いします。


666 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 16:42:08 ]
>>665
わかりましたちょっとまっててください

667 名前:デフォルトの名無しさん [2008/05/12(月) 16:46:32 ]
>>657  なるほど〜 コンパイラの仕様か〜
>>658  指定の仕方は大丈夫なはず コンパイラはMinGW これでいいのかな?
>>659  Sunってコンパイラ名・・? コンパイラによって違うってこと?

668 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 16:55:13 ]
宿題丸投げは宿題スレへ

669 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 17:15:43 ]
>>667
>>659  Sunってコンパイラ名・・? コンパイラによって違うってこと?
Javaを開発し、OpenOfficeを提供している世界最大級のコンピュータソフト・ハード兼業企業。
古くから、SunOSというUnix系のOSを作っている。

670 名前:デフォルトの名無しさん [2008/05/12(月) 17:55:41 ]
あ〜 なるほど OSによって違うってことか〜
勉強になりました

671 名前:デフォルトの名無しさん [2008/05/12(月) 19:47:16 ]
配列に配列を足すことってできないの?
a += b; みたいな

672 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 19:58:27 ]
Linux上では問題なく動作したのですが、
windows(BCC Developer)だと、ファイルをオープンする事ができなくなりました
ファイルパスを絶対パスにしたりと、試行錯誤しましたが解決しません
どうか、解決法をお願いします

ソース
void read_area(struct prefecture *are)
{
   int i;
   FILE  *fpa;  
   if(( fpa = fopen("menseki.txt" , "rw")) == NULL)  
   {
      printf("ファイルが見つかりませんでした\n");
      exit(1);                                      
   }
   for(i=0;i<47;i++)
   {
     fscanf(fpa,"%s %d",are->name,&are->area);
     are++;
   }
}

txtファイルは、Debugフォルダとその上のファルダに置いています

673 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:00:38 ]
>>672
ソースファイルと同じ場所に置けばいけるはずだけど



674 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:01:55 ]
exeと同じ場所

675 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:05:20 ]
>>673
日本語読めますか?

>>672
それが原因かどうかは判らんが、"rw"は間違い。
実装によってはファイルが空になってもおかしくない。

>>671
できません。配列の要素ごとの足し算ならループから書くことになります。
配列の連結と言うことなら、malloc(), realloc()を使うことになるのでその辺りを先ず勉強する必要あり。

676 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:06:59 ]
>>671
それだけの日本語ではさっぱりですよ。
たぶんこういうこと?
for ( int i = 0; i < SIZE; i++ ) {
a[ i ] += b[ i ];
}

677 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:07:58 ]
>>673-674
ファイルの置き場所に問題があるのかと思い、ソースがある場所を含め、
プログラムに関係ありそうなフォルダ全てに置いたのですが、解決しませんでした…

これは、BCCの環境設定?を変更・追加する必要があるのでしょうか?

>>675
Linuxで動いたのは運が良かったからかもしれません…
指摘していただいた点について、もう一度解決法を探してみます


678 名前:677 mailto:sage [2008/05/12(月) 20:16:39 ]
"rw"を"r"にした所、正常に動作しました!
よく考えてみれば、書き込みする必要がないので、"w"は不要ですね…

>>673-675
つまらない質問にも関わらず、素早い対応して頂き、
本当にありがとうございます

679 名前:デフォルトの名無しさん [2008/05/12(月) 20:27:05 ]
>>676
そうだけど

構造体のときは不便だなって思った

680 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:28:31 ]
そう思ったんならC++へ旅立ってしまえ

681 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:54:06 ]
>>679
そんなのラッパー関数かいときゃ次からは楽じゃないか。

682 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 21:25:44 ]
>>641
なれるよ
数学なんて実に簡単なことだ

683 名前:デフォルトの名無しさん [2008/05/12(月) 22:34:04 ]
C言語勉強したいのですがフリーソフトはないんでしょうか?



684 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:34:47 ]
>>683
ぐぐれ

685 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:39:47 ]
>>683
マイクロソフトが無料で配布してるよ

686 名前:デフォルトの名無しさん [2008/05/12(月) 22:52:43 ]
www.microsoft.com/japan/msdn/vstudio/express/default.aspx
これですか?どれをダウンロードすればいいんでしょうか

687 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:53:37 ]
>>686
visualC++だ
そしてとっととうせろ

688 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:54:42 ]
>>686
登録とかめんどくさいからBCC使うといいよ
俺はvisual C++使ってるけど

689 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:01:50 ]
BCC もメルアド登録必要じゃね?

690 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:02:36 ]
デバッガは登録必要だったような気がするけど
コンパイラは要らなかったような…

691 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:03:17 ]
>>689
いらない

692 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:06:20 ]
あれ? メルアド変わるまでスパムのように来てたんだが。

693 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:12:22 ]
VC++も登録いらんだろ
isoを落とせば



694 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:13:13 ]
それめんどい

695 名前:デフォルトの名無しさん [2008/05/13(火) 08:04:28 ]
C++のプログラム作ろうと思ったらVBの作成画面みたいなんですけど
単純にC言語のプログラムを作りたい時はどうしたらいいんですか?

696 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:08:04 ]
>>695
お使いのソフトウェアのスレへどうぞ。

697 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:14:19 ]
>>695
誤 C++のプログラム作ろうと思ったらVBの作成画面みたいなんですけど
正 VisualC++でC++プログラム作ろうと思ったらVBの作成画面みたいなんですけど

Win32コンソールアプリケーションを選べ

698 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:19:27 ]
>>697
それだとスレ違い。ここはCスレ。

699 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:56:55 ]
実行時に与えられる条件により異なる値で初期化して、
以後はconstに扱われるような変数を宣言することはできますか?

700 名前:699 mailto:sage [2008/05/13(火) 13:59:49 ]
追記 環境変数のような働きをするグローバル変数です

701 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:34:04 ]
>>699
実装によっては可能かもしれないが、直接に行うことは一般的にはできない。
constな変数はそれが作成されたときに(関数の外で宣言される変数ならプログラムの開始時、あらゆる関数の外で)初期化されて
以後のコード中では変更できなくなるため、実質的にコンパイル時に解決可能な式でしか初期化できない。

ポインタを間にはさめば、以下のような方法で似たようなものを間接的に宣言することができる。

value.c)
 static int value;
 const int * const vp=&value;

value.h)
 extern const int * const vp;
 #define VALUE (*vp)

このようにしておけば、グローバル変数(のふりをしているマクロ)VALUEの実体であるvalueは、少なくともvalue.c以外で変更されることはない。

702 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:17:07 ]
あとは、取得用の関数を公開する形にして
当該の変数をstaticにしてほかのファイルからは見えないようにするとか、
const変数を動的初期化できるC++へ移ってしまうとかが考え付く。

703 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:32:16 ]
int GetValue()
{
  static int value=-1;

  if(value < 0){ /* 最初に呼び出されたときに初期化される */
    :
    :
  }

  return value;
}

#define VALUE GetValue()

な手か



704 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:14:38 ]
失礼します。

void hoge(double** matrix)
{}

等として受け取ったdouble**の配列の要素数をその関数内で知るすべがあったらご教授願います。

705 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:24:57 ]
ありません

706 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:33:22 ]
配列matrixの終端要素になにか特別な値が格納されていれば
それを検出することで長さを知ることができる
そうでなければ無理

707 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:00:51 ]
char name[100];


name="hoge.txt";

みたいに代入したいんですが、エラーになります。
*name="hoge.txt";
でもできません。どうやるんでしたっけ?

708 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:04:40 ]
何で駄目なのかはわかる?

strcpy(name, "hoge.txt") とか?
strncpy(name, sizeof(name) - 1, "hoge.txt")か

709 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:07:16 ]
>>708
すいません。わからないので教えていただけるとありがたいです

710 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:24:03 ]
>>709
Cでは配列は二級オブジェクト(メモリ上に存在するが演算の対象にならない)で、
配列名は大抵の場合配列そのものではなく配列の先頭要素のアドレスを意味する。
アドレスに代入することはできないので、name="hoge.txt"; のような文は無効になる。
配列名に対して直接=演算子が使えるのは、宣言時に初期化するときだけである。

配列に対して任意の配列をコピーするにはmemcpyやmemmove、
あるいは配列が'\0'で終わるcharの配列(文字列)である場合にはstr〜系の関数を使う。

711 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:43:39 ]
1)
strcpy(name, "hoge.txt");

2)
strncpy(name, sizeof(name)-1, "hoge.txt");
name[sizeof(name)-1]='\0';

3)
name[0]='\0';
strncat(name, sizeof(name)-1, "hoge.txt");

1)はもっとも単純明快だが、もしnameに割り当てられている領域が
コピーしようとしている文字列より小さかったらたぶん問題がおきる
そのような場合に文字列を切り詰めて安全を保証したいなら2)または3)を使う

712 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:51:33 ]
わかりました!どもうありがとうございました

713 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:00:36 ]
>>711
横見だが 2 および 3 の引数の並びちがうぢゃろ。
strncpy(name, "hoge.txt", sizeof(name) - 1);
name[sizeof(name) - 1] = 0;



714 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:24:12 ]
文字列リテラルをコピーするのにstrn*()を使うのか……

715 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:24:59 ]
当然だろ

716 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:26:55 ]
sprintfでおk

717 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:18:04 ]
だからオーバーフローが・・・

718 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:20:16 ]
オーバーランじゃねーの?
それともオーバーフローでもおkなの?

719 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:21:04 ]
おk

720 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:22:55 ]
ttp://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%83%B3
ラン姉ちゃんの方でした、すまそ

721 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:25:09 ]
>>717
桁数勘定して sprintf(b, "%100s", s); って, 書けば OK なんじゃないの?


722 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:32:56 ]
>>720
バーロー

723 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:55:15 ]
自分の言語/文法理解が間違ってるのかも、と思って駆け込んできた
---
#include<stdio.h>

int ary_[]={1,2,4,8};

int main(int argc,char** argv){
int* ary=ary_;
int i=(*ary++) ^ (*ary++);
printf("%d\n",i);
return 0;
}
---
これの実行結果がゼロになるのはなんでだぜ?
VC9EE v15.00.21022.08 最適化無指定、/O1 で発現 VC9SP1βはまだ試してない



724 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:57:31 ]
>>723
未定義動作だからどうなっても文句は言えない

むしろどうなると思ったんだよ・・・

725 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:59:10 ]
副作用完了点

726 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:01:58 ]
>>721
いや、そういう意味じゃなくて・・・それらの問題点は
プログラムそのものがトラブルを起こしてしまう仕組みを持っていることであって
問題の無い範囲内でユーザが使う分にはなんら不具合には気づかない、起こらないわけで・・・

727 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:06:18 ]
>>724
え。一発目の*ary++が1に、二発目の**ary++が2に、…
…いや、最適化で順序がどうなっても、i==3にはなると思ったんだ
/Fa によると、どちらも*aryになり、そのあとで2回ary++が発生してた

どこで未定義なんだろう…。

// ここでリロード

>>725
ヒントありがとう ぐぐったら一発 必ずしも都度都度副作用が発生するわけじゃないのか
アマだが、聞かねば一生のバグ撒き散らしになるところだったよ 恥晒してよかった

728 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:21:13 ]
ary = ary++;

729 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:22:15 ]
>>728
いやそれを書き込む意味が和漢ね

730 名前:723 mailto:sage [2008/05/14(水) 00:28:52 ]
>>729
これを考えてみろ。ってことだろう

実際にVC9EEにつっこんで結果を見てみた
ary = ary;
ary++;
になった 俺には示唆に富んでると思う

731 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:29:43 ]
>>723
未定義だけど、1^1で0になってる気がする

732 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:38:23 ]
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
調べたら色々書いてあった

733 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:24:07 ]
直前の副作用完了点と次の副作用完了点までの間に、
式の評価によってオブジェクトに格納された値を変更する回数は
高々一度だけでなければならない。更に、変更前の値は、
格納される値を決定するためだけにアクセスしなければならない。



734 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:25:37 ]
pc11.2ch.net/test/read.cgi/tech/1201153965/157

735 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 06:32:45 ]
初心者なんですが、お願いします
文字列を式として扱って計算結果を出力する
というような便利な関数ってあるのでしょうか?




736 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 07:26:22 ]
標準ではありません。頑張って作ってください。

まぁ、unix系ならシェルで計算すれば済むけどね。

737 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 07:30:10 ]
Java、JavaScriptだと eval というものがあるんだが、自分で実装するっきゃないね。

738 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 09:05:47 ]
簡単な計算させる程度なら、bison/flexあたりでどうにか。

変数が入るようなやつなら、いろいろあるけど、いっぺんPerlとか使うといいと思うよ
Perlで書く。のではなくて、perl*.dllをつつくように書く あれはインタフェースがCだから。
セキュリティの確保とか結局いろいろ大変になるだろうけど、示唆に富んでていいと思う

739 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 10:10:26 ]
>>735
ttp://www.google.com/codesearch?hl=ja&q=+lang:c+eval+show:LKM9fPKCrz0:r3iT8J84R1w:wri6GBkgM20&sa=N&cd=1&ct=rc&cs_p=ftp.gnu.org/gnu/glibc/glibc-2.3.6.tar.bz2&cs_f=glibc-2.3.6/dlfcn/eval.c#l121

LGPLだけど、Google Code Searchで検索すると60行程度で実装している例がある。


740 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 13:49:08 ]
学校の課題で
「関数の中で宣言した値は、関数の実行が終わった後どうなるのか?たとえば二度目に関数を呼んだとき値を読んでみたら
どうなるのか?」
って問題が出たんだけど答えどころか質問の意味すらわかりません。よかったら教えてください。

741 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 13:53:49 ]
ローカル(自動)変数とか、静的(スタティック)変数とかを教える意図の質問じゃないのかな?

742 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 13:54:37 ]
>>740
void hoge(void)
{
   int a;   ← A
   a = 2;
   a = a * 2;
} ←@


void main (void)
{
   hoge();
   hoge();
}

@関数終わったらaはどうなる?
A2回目のhoge呼び出しの時、このaに4が入っていると思うか?

743 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 13:56:53 ]
ローカル変数には初期値入れることになるんだし
なんだかなぁって思う問題



744 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:32:20 ]
>>741-743
こんな早く答え返ってくるとは思ってませんでした。
有難う、みんな優しいですね。
>>742
@無くなる?
A…4じゃないんですか?


745 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:35:20 ]
aに何も入れない状態で出力させるのさ。
できれば、hoge()を呼び出す階層を変えて試すのもやってみて
(別の関数を呼び出しその中からhoge()を呼ぶ)

746 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:48:58 ]
成程!試してみますね。
ご丁寧に有難うございました。


747 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:16:09 ]
試してみる、はよくない
たまたま4が入ってたらどうするんだ

748 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:25:10 ]
高確率で入ってるだろ。
だから深さも変えるといいかな、と。
アドレス表示させる手もあるが。
最適化されてると混乱しそう。

749 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:41:12 ]
ちゃんとCの仕様を示して理解させるのが正しい姿勢
とりあえず試してうまくいったから、なんてのを放置すると
そのうち必ずなにかやらかす

750 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:42:09 ]
>>744
@無くなる
A何が入っているかわからない

751 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:50:04 ]
>>740
関数の中でstaticをつけずに宣言した変数は、その関数の呼び出し中にのみ存在する変数(auto変数)となる。
宣言した関数から抜けた時点で、変数のために使われていた記憶領域は解放されて意味のないものになる。

このような変数は、明示的に int a=2; などのように初期化しないかぎり、
その宣言時における値は常に不定(何が入っているかわからない)である。
このような変数の中身を、明示的に値を与える前に使ってはいけない。

752 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:50:57 ]
学校の課題なんだから、そんなのは教わるんだろう。
今知りたいのはこの質問の意図するところだべ。

753 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:55:28 ]
仕様を理解してりゃ意図はわかるだろ
意図がわかんないってのは理解してないからだ



754 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 16:00:37 ]
>>740
なお、staticをつけて宣言した変数は、プログラムが実行を開始してから終了するまで存在し、
その開始時に一度だけ、明示的な初期化式があればその値に、なければ「=0;」とか「={0};」と
書いたかのように初期化される。


755 名前:740 mailto:sage [2008/05/14(水) 23:45:33 ]
>>753
その通りです。
まだ講義で習ってない範囲(質問する前は習ってない範囲
かすらもわかりませんでした)で何も知りませんでした。
今回皆さんに教えて頂いたお陰でまだ何となくですが、
わかるようになりました。
あとは講義で理解していこうと思います。

補足してくださった方々もわかりやすい説明有難うございました!
ここ勉強になりますね。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<213KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef