ポインタ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
馬鹿太郎

ポインタ

#1

投稿記事 by 馬鹿太郎 » 16年前

#include <stdio.h>
#include <string.h>

void main()
{
  char array[7];
  char *ptr;

  /**
   * char配列に、文字列をコピーする
   */
  strcpy(array, "abcdef");

  /**
   * char ポインタに、char配列の先頭のアドレスをコピーする
   */
  ptr = &(array[0]);

  /**
   * char ポインタに、文字列をコピーする
   */
  strcpy(ptr, "ghijkl");

  /**
   * char 配列、char ポインタをそれぞれ文字列形式で表示する
   */
  printf(" array = %s\n ptr = %s\n", array, ptr);
}
実行したら、
array=abcdef
ptr=ghijkl
となりました。

ポインタptrはアドレスしか格納できないですよね?
strcpy(ptr, "ghijkl");
は変数ptrにghijklをコピーするのでしょうか?

馬鹿太郎

Re:ポインタ

#2

投稿記事 by 馬鹿太郎 » 16年前

すいません、訂正です。
実行したら
array=ghijkl
ptr=ghijkl
です。

box

Re:ポインタ

#3

投稿記事 by box » 16年前

全角空白で「インデントもどき」は、お控えいただけますでしょうか。


1)strcpy(array, "abcdef"); の実行後

      +-----+-----+-----+-----+-----+-----+-----+
array | [0] | [1] | [2] | [3] | [4] | [5] | [6] |
      | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | '\0'|
      +-----+-----+-----+-----+-----+-----+-----+


2)ptr = &(array[0]); の実行後

     ptr
      |
      v
      +-----+-----+-----+-----+-----+-----+-----+
array | [0] | [1] | [2] | [3] | [4] | [5] | [6] |
      | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | '\0'|
      +-----+-----+-----+-----+-----+-----+-----+


3)strcpy(ptr, "ghijkl"); の実行後

     ptr
      |
      v
      +-----+-----+-----+-----+-----+-----+-----+
array | [0] | [1] | [2] | [3] | [4] | [5] | [6] |
      | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | '\0'|
      +-----+-----+-----+-----+-----+-----+-----+

ptr が指している場所(つまり array[/url] の先頭)から7バイト分に
"ghijkl" (終端の'\0'を含む)を格納します。

2)を省略して3)を実行すると、どこを指しているかわからない ptr に
"ghijkl" を格納しようとするため、うまく実行できないことがあると思います。
2)を省略する場合は3)のかわりに
ptr = "ghijkl";
と書くのでありましょう。

SCI

Re:ポインタ

#4

投稿記事 by SCI » 16年前

その場合、ptrは「char配列の先頭へのポインタ」です。
つまり、ptr == &(array[0]) == array なので、strcpy(array, "ghijkl");と同じことです。

馬鹿太郎

Re:ポインタ

#5

投稿記事 by 馬鹿太郎 » 16年前

ありがとうございました。大変理解できました。

閉鎖

“C言語何でも質問掲示板” へ戻る