ページ 1 / 1
ポインタ
Posted: 2009年2月23日(月) 21:35
by 馬鹿太郎
#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:ポインタ
Posted: 2009年2月23日(月) 21:41
by 馬鹿太郎
すいません、訂正です。
実行したら
array=ghijkl
ptr=ghijkl
です。
Re:ポインタ
Posted: 2009年2月23日(月) 21:47
by box
全角空白で「インデントもどき」は、お控えいただけますでしょうか。
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";
と書くのでありましょう。
Re:ポインタ
Posted: 2009年2月23日(月) 21:56
by SCI
その場合、ptrは「char配列の先頭へのポインタ」です。
つまり、ptr == &(array[0]) == array なので、strcpy(array, "ghijkl");と同じことです。
Re:ポインタ
Posted: 2009年2月23日(月) 22:33
by 馬鹿太郎
ありがとうございました。大変理解できました。