タグ

ポインタに関するrin51のブックマーク (7)

  • 連結リストの操作にダブルポインタを使う - 不確定特異点

    連結リスト(Linked List)を使って要素を昇順に並べて管理したいとします。通常は以下のコードのように、リストの先頭を示す要素を用意することで、リストがNULLのときも、そうでない場合も、場合分けをせずに実装することが可能です。 #include <stdio.h> #include <stdlib.h> typedef struct list { struct list *next; int value; } list_t; list_t head; /* リストの先頭 */ void insert(int a) { list_t *p; /* 先行するポインタ */ list_t *q; /* 手前のポインタ */ list_t *new; for (q = &head, p = head.next; p != NULL; q = p, p = p->next) if (a <

    連結リストの操作にダブルポインタを使う - 不確定特異点
  • 【初心者向け】ポインタはなぜ難しいか(ポインタのちょっとしたコツ) - Qiita

    はじめに C言語初心者には、なぜポインタが難しく感じられるのか。 ポインタの解説というと、しばしば「住所の書かれたメモを渡す」というアナロジーで説明されますが、ポインタという概念自体は、理解するのにそれほど難しいものではないと思います。 難しい理由は、以下の3点だと思っています。 そもそも記法が変態的で、人間の目に優しくない。 この変数には○○を指すポインタが格納されてて、○○もポインタで××を指していて…とか考えているうちに、頭がこんがらがる。 配列とポインタの奇妙な互換性に混乱する。 1は(まったく同感ですが)慣れが解決する問題であり、3については、配列には配列特有の読み方があるため、別の機会に書きたいと思います。 記事では、上記の3点のうち、2の問題を軽減するためのコツについて、解説してみます。 対象読者 記事が対象とする読者像は、以下です。 int n; int *p = &n

    【初心者向け】ポインタはなぜ難しいか(ポインタのちょっとしたコツ) - Qiita
  • pointer's boot camp

    pointer's boot camp は C/C++ のポインタを学習するための4択問題集です。 以下の10問の答えを選択し、画面下部の【採点】を押してください。 ※ sizeof(void*) は 4、sizeof(int) は 4、sizeof(short) は 2 とする。 ※ 文字エンコーディングは ASCII 、文字列は '\0' を終端とする。 ※ バイトオーダはリトルエンディアンとする。 Q1: ★ int data[100] がある時、配列の先頭アドレスを int *ptr に設定するには? ptr = data[]; ptr = &data; ptr = data[0]; ptr = data; Q2: ★ char *ptr が文字 'A' ~ 'F' を指している時、文字を数値(10~15)に変換するコードはどれ? *ptr + 'A'; *ptr + 'A' +

    rin51
    rin51 2013/12/21
    > pointer's boot camp は C/C++ のポインタを学習するための4択問題集です。
  • はじめてのH8マイコン 基礎編<br><第22回>H8マイコンで必要となるC言語プログラミングの基礎知識…ポインタを理解しよう! - H8

    はじめてのH8マイコン 基礎編 <第22回>H8マイコンで必要となるC言語プログラミングの基礎知識…ポインタを理解しよう! これまでいくつかプログラム例を示してきましたが,「*」の付いた変数「*pdr」が出てきています.これは「ポインタ変数」と呼ばれ,H8マイコンの C言語プログラムではアドレスを指定してデータをやりとりする重要な用途に使われます.  そこで,今回はこのポインタについて解説していきましょう.「ポイ ンタを知らずにC言語プログラミングを語れない」と言われるほどポインタの概念はとても重要です.ポインタからC言語がわからなくなったという話もよく耳 にします.初心者にとってポインタの概念を理解することは,一般的に鬼門と言われておりますが,頑張っていきしょう.イメージさえつかむことができれば,それほどポインタは難しいものではありませんよ. ■ポインタとは? まずポインタという概

  • メモリをアドレスを直接指定して値を取得するには - OKWAVE

    > この時点で変数valueには0xF000番地の値が正確に代入されてますでしょうか? 根的に間違っています。 やりたいことは、 value ← (0xf000) でいいんですね。 だとすれば、次のようにします。 const unsigned char *p_value = (const unsigned char*)0xf000; unsigned char value = *p_value; p_value = 0xf000;とした場合、p_valueというポインタ変数に0xf000番地を格納することになり、valueの中身には影響を与えません。 ところで、フラッシュメモリとのことですが、普通にアドレス空間にマッピングされていますか? そのフラッシュメモリ特有の手順で読み込まないといけない(例えばコンパクトフラッシュのような)場合には、こんなに単純にはいきません。 > 正確に代入され

    メモリをアドレスを直接指定して値を取得するには - OKWAVE
  • C++ ポインタ ブートキャンプ

    Sapporo.cpp & CLR/H 合同勉強会 ( http://atnd.org/events/33614 ) で発表したスライドです。

    C++ ポインタ ブートキャンプ
  • Cでのポインタの読み方

    Cでのポインタの読み方 Cのポインタの読み方は、ルールを知らないと摩訶不思議です。 ルールを覚えれば、 int (*p[5])[3]; char (*(*fp)(void))(int); なんてのも解読する事ができます。 大事な前程 ポインタを読む際には、「英語で読む」必要があります。 「え~、英語~」 と思う方もいるかもしれませんが、逆に日語で読む方が大変です。 基ルール ルール 後置演算子が優先。 関数の() 配列の[] 前置はあとで。 要は、「後ろに何かあったら、後ろが優先」です。 演算子の英語での読み方 * pointer to ... () function returning ... [] array of ... Lesson 1 まず、演算子が単独で出てくる場合です。 Lesson 1-1 pointer to ... int *p; これは、まずpを見ましょう。 i

  • 1