最速怪談選手権

配列とポインタについて、
abcをポインタで指定して
[a(ポインタで指定されたアドレス1)][b(アドレス2)][c(アドレス3)]とポインタで指定されたアドレスを先頭に配列にabcが入るのでしょうか?
ポインタpがアドレスを振り、
そのアドレスの振られた配列(アドレス)から文字列の文字が一文字ずつ入るという理解は正しいですか?

A 回答 (2件)

まあ、実際自分で単純なコード書いて調べてみりゃエエんだよね。



#include <stdio.h>

int main(void) {
 int i;
 char str[] = {'a', 'b', 'c', '\0'};
 char *ptr;

 ptr = str;      /* 配列strをptrに代入 */

 /* 先頭の位置の検証 */
 printf("%p\n", str);   /* 変数strの「アドレス」を調べてみる */
 printf("%p\n", ptr);   /* ptrが保持してる「アドレス」を調べてみる */
 ptr = &str[0];    /* ptrに配列strの「第一要素」のアドレスを代入 */
 printf("%p\n", ptr);   /* 配列strの第一要素の「場所」は? */

 /* 配列の「要素」のアドレスを調べてみる */
 for(i = 0; str[i] != '\0'; i++) {
  ptr = &str[i];
  printf("%c %p\n", str[i], ptr);
 }

 /* ポインタにstrのアドレスを代入して調べてみる */
 ptr = str;
 while (!(*ptr == '\0')) {
  printf("%c %p\n", *ptr, ptr);
  ptr++;
 }

 return 0;
}
    • good
    • 1

以下のソースの場合、



char moji[]="abc";
char *p;
p = &moji[0];

文字列(配列)abcが配置されている先頭アドレスが仮に0x76543210だとすると、
ポインタpの値は0x76543210
文字aのアドレスは同じ0x76543210
文字bのアドレスは…0x76543211 ポインタp+1の場所
文字cのアドレスは…0x76543212 ポインタp+2の場所
になります。
    • good
    • 0
この回答へのお礼

では、私の理解は正しいでしょうか?

お礼日時:2021/02/02 03:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!