• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

이제와서 조금 늦은 질문인 것 같지만

20.09.22 20:05 작성 조회수 122

0

#include <stdio.h>

int main()
{
    const char* mythings[5] = {
	"Dancing in the rain",
	"Counting apples",
	"Watching movies with friends",
	"Writing sad letters",
	"Studying the C language",
    };
	printf("%s\n", mythings[0]);
}

return 0;

배열mythings는 char에 대한 포인터 배열이고 mythings[0]은 문자열"Dancing in the rain"의 첫 번째 주소, 'D'가 있는 주소인데 이 주소를 string으로 출력하면 어떻게, 어떤 원리로 문자열이 출력되는지 모르겠습니다.

puts함수도 아닌 printf함수인데 어떻게포인터로 문자열을 출력할 수 있는지 궁금합니다.

2.

디버거로 메모리 구조 확인할 때 의문점이 생겼는데요

0x00837B30는  포인터mythings[0]자체의 주소가 아닌 mythings[0]가 가리키고 있는  주소인 것이죠?

추가로 개인적인 질문인데 yourthings[0]를 포함해 yourthings배열의 원소들이 가리키는 주소는 mythings의 원소들과 다르게 F2로 주소수정 및 복사가 안되는지 궁금합니다.

답변 1

답변을 작성해보세요.

1

Hello Yeo님의 프로필

Hello Yeo

2020.09.23

안녕하세요?
1. 작성하신 코드는

#include <stdio.h>
int main(void)
{
	char *str = "Hello, World!\n";
	printf("%s\n", str);
	return 0;
}

과 같은 구조입니다. 전의 질문들로부터 생각하건데 저는 *과 &의 의미를 포인터 강의를 보면서 다시 정리하시는 것이 좋을 것 같습니다.

2. 생각하신 것이 맞습니다. 마지막은 무슨 말씀인지 잘 모르겠군요...

그리고... 다음 질문부터는 강의의 어느 부분인지 표시도 부탁드리겠습니다.