C言語なら俺に聞け(入門編)Part 66at TECH
C言語なら俺に聞け(入門編)Part 66 - 暇つぶし2ch554:デフォルトの名無しさん
10/06/24 09:48:36
俺の感覚
アドレス = 型情報は含まない。
       "単なる住所"
ポインタ = アドレスと共に型情報も含む
       加減算や指し先の参照等で、与えられた型に応じて評価してくれる
       "どういう住人が住んでいるかを示している住所"

555:名無し
10/06/24 10:21:07
よくわからないが
"aiueo"はchar p[10]="aiueo";

ポインタを返すとは 先頭アドレスのpを返すこと?
配列の場合は&をつけなくていいんだよな先頭は
char *a;
a=p;
アドレスを返す場合は&p[0]などでいいんだよな?

文字リテラルは配列になるので &をつけなくても先頭のアドレスをポインタというのか?


556:名無し
10/06/24 10:37:49
char *p="abc";
があるとすると
>>この "abc" という式を評価すると、先頭の文字 'a' が格納されたメモリ領域を示すポインタが返ってきます!
と書いてあるのだが、100番地から始まったとして
a    b   c    \0
100番地,101番地,102番地,103番地
この領域をひっくるめてポインタというであっているのか

100番地とかはアドレスであり ポインタを返すという表現は
100~103番地全体を返すということ?

557:名無し
10/06/24 10:39:31
100~103全体がポインタで
100や101それぞれはアドレスでおk?

558:デフォルトの名無しさん
10/06/24 10:44:59
ポインタはアドレスを抽象化したもの。

559:デフォルトの名無しさん
10/06/24 11:00:06
名前:ピッコロ
アドレス:ナメック星一番地
ポインタ:住所はナメック星一番地、俺はピッコロだぁああああ

560:デフォルトの名無しさん
10/06/24 11:05:07
まぁビットから

561:デフォルトの名無しさん
10/06/24 12:26:09
>>556
通りすがりの元プログラマーです
ポインタは「アドレス用の変数」と思っておけばOKです
例えばアドレスが16ビットの環境なら

char *a;
int *b;
long *c;
printf("%d %d %d",sizeof(a),sizeof(b),sizeof(c));

↑16ビットなので全て2になる…はず(今、手元にCの環境が無いので確認できないw)

ポインタの型は
*c、← cにはアドレスが入ってるので、その位置にLong型があると解釈される
b++ ← int型ポインタなので、アドレスに(16ビット環境なら)+2される
などの時に必要になります

562:デフォルトの名無しさん
10/06/24 12:28:01
そんな決まりあったっけ?

563:デフォルトの名無しさん
10/06/24 12:29:35
ありますよ
調べてみてください

564:デフォルトの名無しさん
10/06/24 12:40:19
いまどき16ビット環境で語っちゃう人って……

565:デフォルトの名無しさん
10/06/24 12:43:34
まぁ揚げ足取りになるけど
ポインタ全部が同じ大きさであるような言い方は良くない

566:デフォルトの名無しさん
10/06/24 12:48:07
というか、ポインタのサイズを得々と語ってるけど
たからどうしたとしか思えない

567:デフォルトの名無しさん
10/06/24 13:27:39
ですね

568:デフォルトの名無しさん
10/06/24 16:04:53
そもそも返さねぇよ。ファンクシャンじゃねぇんだから。

569:デフォルトの名無しさん
10/06/24 17:13:14
>>554にある型情報の型ってどんな情報?
で型はどのように決められるの?

570:質問
10/06/24 17:13:52
国語、社会、理科の3科目の合計と平均を求める問題で、
URLリンク(www.geocities.jp)
こちらのHPにある解答を実行してみたら、
goukei=2144332132 average is=2442545234
のような表示結果が出てきてうまくいきませんでした。

どこが違うのかどなたか教えていただけますか?
よろしくお願いします

571:デフォルトの名無しさん
10/06/24 17:15:21
>>570
ここはエスパーを召還するスレか?
うまくいかなかったソースを貼れよ

572:デフォルトの名無しさん
10/06/24 17:17:41
ポインタ=アドレス値 と考えていいよ
>>557
>100~103全体がポインタ
仮にC言語に文字列型があれば、その例では、全体は(文字列型)

573:デフォルトの名無しさん
10/06/24 17:33:48
仮の話はいりません。C言語に文字列型はありません。

574:554
10/06/24 17:36:17
>>569 俺の感覚の話なので、イメージで

宣言時に * の前に型指定してるじゃん(ex int * 等) それを指して型情報を持っている と捉えてる。
void * 中の void も 型無し という型指示されている という意識ね

 int a[3]
 int *p = a;
 int *q = a + 2;
 void *hoge = a;

q-p は合法で sizeof(int) に関係無く 2 を返すし hoge - p は非合法。

アドレスは、ただの整数値 という意識

575:デフォルトの名無しさん
10/06/24 17:45:16
> sizeof(int) に関係無く 2 を返すし
ヴォケ

576:デフォルトの名無しさん
10/06/24 17:48:16
>>575
ポインタ - ポインタ の値だぞ? アドレスの距離を返さずに、要素差返すんだけど?

577:デフォルトの名無しさん
10/06/24 17:56:09
煽る前に確認しろってことだな

578:デフォルトの名無しさん
10/06/24 18:21:56
>>576
ポインタの差を出すことは合法だろ
専用の型まであんのに

579:デフォルトの名無しさん
10/06/24 18:25:37
>>570
#include <stdio.h>

main()
{
  int kokugo,shakai,rika;
  int goukei,heikin;

  printf("国語の点数=");
  scanf("%d",&kokugo);
  printf("社会の点数=");
  scanf("%d",&shakai);
  printf("理科の点数=");
  scanf("%d",&rika);

  goukei = kokugo + shakai + rika;
  heikin = goukei / 3;

  printf("合計=%d  平均=%d \n",goukei,heikin);
  return 0;
}

580:デフォルトの名無しさん
10/06/24 18:27:59
いやintじゃねぇだろって言いたかったんだ
レスも安価も間違っちゃってるが

581:デフォルトの名無しさん
10/06/24 19:04:55
>>570
>>579
正常に動作している。
cygwin 1.7/gcc 4.3.4/Windows XP SP3

582:デフォルトの名無しさん
10/06/24 19:07:19
cygwin()笑い

583:名無し
10/06/24 19:13:26
ポインタのことだが
char *p="ABC";

ポインタを返すという表現をのせてるサイトがあったが

abcを確保して
先頭のアドレスを返すって意味と同じだったらしい
ポインタを返すって書くんじゃなくて abcが保存されてる場所の先頭アドレスを返すっていみ

すっきりしたよ

584:デフォルトの名無しさん
10/06/24 20:09:13
const char* p = "ABC"; なのに
char *p="ABC";
でOKなの?

585:デフォルトの名無しさん
10/06/24 20:14:04
規格で保証されている
内容書き換えちゃだめだけど

586:デフォルトの名無しさん
10/06/24 20:22:53
>>584
C言語/C++03以前では非constポインタへの暗黙変換が許される

587:デフォルトの名無しさん
10/06/24 20:40:46
つかC言語では文字列リテラルを評価した時の型はchar*と違ったか?
確認して書いたわけじゃないんで記憶違いならすまん。

588:デフォルトの名無しさん
10/06/24 20:43:43
>>587
sizeof は char* とは異なる

589:デフォルトの名無しさん
10/06/24 20:45:39
>>586
C++03でも許されてるはずだけど
「以前」ってのは含むのか含まないのか

590:デフォルトの名無しさん
10/06/24 20:46:53
>>587
文字列リテラルは array of const char で、当然 const char* に暗黙変換可能
ただし、例外的に char* に暗黙変換可能

591:デフォルトの名無しさん
10/06/24 21:57:16
>>589
一般ピーポーじゃあるまいし含むのが普通だろう

592:デフォルトの名無しさん
10/06/24 21:58:54
void f(char const x); // f(char)でも呼べるのに

template<typename T>class A;
void f(A<char const>x); // void f(A<char>); で呼べないのは不便だとおもう。

593:名無し
10/06/24 22:06:51
一般ピーナッツだろ

ねえ、int a;
&a=0xbffff978;とか代入できないんだが何故?

アドレスを直接いれるってのは無理なの?

594:デフォルトの名無しさん
10/06/24 22:10:13
キャストしる
0は特別扱い

595:デフォルトの名無しさん
10/06/24 22:11:03
1+2=5;
と同じ

596:594
10/06/24 22:13:34
いや、ちげえ
なんだそれ

597:デフォルトの名無しさん
10/06/24 22:24:06
>>593
int a;
*(&a)=0xbffff978;


598:デフォルトの名無しさん
10/06/24 22:27:03
>>593
int *a = (int*)0xbffff978;
*a = 0;

メモリマップドI/Oならvolatileつけた方が良い

599:デフォルトの名無しさん
10/06/24 22:27:11
いやそれ只のa =

600:デフォルトの名無しさん
10/06/24 22:28:41
>>599>>597

601:デフォルトの名無しさん
10/06/24 22:30:37
そのアドレスがすでに使われてたりしないの

602:デフォルトの名無しさん
10/06/24 22:31:10
なんでアドレスとポインタの区別がつかないんだ?
アドレスは定数だっつーのに代入しようとすんなよ

603:名無し
10/06/24 22:31:53
>>597,598

もやっと解消してくれてありがとう^w^b
アドレスを直でいれられたとは初めてしったお

604:デフォルトの名無しさん
10/06/24 22:44:28
>>601
むしろシステム他に使われてるからこそ、そこを指したいだろ

605:デフォルトの名無しさん
10/06/24 22:49:46
ああ、任意の場所を確保しようとしてるわけじゃないのか
配列と混同した

606:デフォルトの名無しさん
10/06/25 00:43:54
本棚には入門者の本で埋め尽くされています。
いい加減入門レベルから卒業したいんですがどういうプログラムがかけるようになれば
中級、上級者になれるのですか。
私は、他の人が作成したプログラムにけちをつけるくらいの力は持っています

607:デフォルトの名無しさん
10/06/25 00:46:45
自分が作りたいプログラムがすぐに作れるようになったら

608:デフォルトの名無しさん
10/06/25 01:09:39
>>606
入門編としてマスターマインドを作ってみる

609:デフォルトの名無しさん
10/06/25 01:12:23
コンパイラをゼロから書けるようになったら「入門」だろ。

610:デフォルトの名無しさん
10/06/25 01:13:29
>>609
どこに入門するんだよ
ハードルたけぇよ

611:デフォルトの名無しさん
10/06/25 01:15:34
まーた口だけプログラマーかよ
gccレベルのもん書いてから偉そうなこと言えっつーの

612:デフォルトの名無しさん
10/06/25 01:16:20
>>611
偉そうなだけの人キタw

613:デフォルトの名無しさん
10/06/25 01:28:26
OSとコンパイラなら、どっちが先かえ?

614:デフォルトの名無しさん
10/06/25 01:32:02
比較するようなもんじゃない

615:デフォルトの名無しさん
10/06/25 02:02:05
規格に書いてある内容が一通り理解出来るまでが入門。
ある一つの処理系について何処が処理系依存がどう動くか、
その処理系の独自拡張や使えるライブラリ群に精通するぐらいが中級。
世にある代表的な多くの処理系について中級レベルに
分かるようになると上級。

実際に複雑なプログラムを作るには、Cの技術力より
設計やテストの技術、そして作りたい物の分野に対する
知識の方が重要です。

つまり>>606はスレ違い。
強いて言えば、コンパイラ作れて中級の入口じゃね?
構文解析手法やら機械語やらCそのものとは
あまり関係ない知識もたらふく要るけど。

616:デフォルトの名無しさん
10/06/25 02:16:03
>>612
あーん?

617:デフォルトの名無しさん
10/06/25 09:41:33
>>616
あなたの書いた「gccレベルのもん」を拝見させていただこうか

618:デフォルトの名無しさん
10/06/25 10:27:34
gccレベルという意味がわからん。

何と比べて、どの部分がどう高いんだ???

CでなくC++という意味か?
Unix系のOSが扱えるということ?

619:デフォルトの名無しさん
10/06/25 10:37:23
gccそのものを書けるぐらいのレベルって話だろw

620:デフォルトの名無しさん
10/06/25 13:00:01
gccって、あれ一人で作ってんのか?

621:デフォルトの名無しさん
10/06/25 15:41:51
gccを書いて偉そうな事を言ってる人もいるが
あれはあれで聞く気になれないよなw

622:デフォルトの名無しさん
10/06/25 16:06:35
>>621
そんな偉そうなことを言えるほどお前は有能なのか
身の程を知れよ

623:デフォルトの名無しさん
10/06/25 16:14:54
有能な>>622がgccをつくってくれるそうですよ

624:デフォルトの名無しさん
10/06/25 17:10:12
> コンパイラをゼロから書ける

と言われて gcc くらいしか発想にない頭の不自由な方イタすぎ

625:デフォルトの名無しさん
10/06/25 17:14:30
16進表記のテキストをバイナリ保存しなおすだけでもコンパイラと呼んでいい?

626:デフォルトの名無しさん
10/06/25 17:21:54
>>624
大学1年だろ、プログラミングを始めてまだ半年も経っていないから…

627:デフォルトの名無しさん
10/06/25 17:25:27
コンパイラのデザインと実装の講義・実験があったのは2回生のときだったなぁ。
今でもgccレベルのものなんて容易には作れないが。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch