저기. 포인트와 배열관계에서.. 질문좀..

min2to의 이미지

#include <stdio.h>

int main (void)
{
int a[5]={0,1,2,3,4};

printf("%d, %d ,a[0], a[1]); //배열요소 출력

printf("%d, %d , &a[0], &a[1]);// 배열요소의 주소 출력

printf("배열 이름: %d ,a); //배열 이름 출력

return 0;
}

문제가 이건데여... 흠..

제 예상으로는..

0,1
10진수의..정수 0,1
1,2,3,4,5

이런식으러 나올줄 알았는데..

마지막께..10진수의 0의 값이 나오더라구여..

막.. 보고 있는데.. 이해가 않가네여...

흠.. 제가 기초포인터 지식에서.. 이해가 덜되었다는 증거인가..

익명 사용자의 이미지

질문이 뒤숭뒤숭하고 성의가 없으니... 답변달기도 싫군여.

실행결과 긁어붙이고 뭐가 예상이랑 틀린건지 제대로 적으십시오.

min2to의 이미지

min2to wrote:
#include <stdio.h>

int main (void)
{
int a[5]={0,1,2,3,4};

printf("%d, %d ,a[0], a[1]); //배열요소 출력

printf("%d, %d , &a[0], &a[1]);// 배열요소의 주소 출력

printf("배열 이름: %d ,a); //배열 이름 출력

return 0;
}

문제가 이건데여... 흠..

제 예상으로는..

0, 1 //배열의 요수 출력
12345036 , 1245040 //배열요소의 주소 출력
01234 //배열 이름 출력

이렇게 나올줄 알았는데

0, 1 //배열의 요수 출력
12345036 , 1245040 //배열요소의 주소 출력
1245036 //배열이름

이렇게 나오더라구여

배열이름이 이상하게 나온거같아서..

왜 1245036 이 나오나여..

흠.. 그날 ..졸았나보네여... 성의 없게 쓴점 죄송합니다 -- __꾸벅..

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

revizes의 이미지

#include <stdio.h> 

int main (void) 
{ 
int a[5]={0,1,2,3,4}; 

printf("%d, %d",a[0], a[1]); //배열요소 출력 

printf("%d, %d", &a[0], &a[1]);// 배열요소의 주소 출력 

printf("배열 이름: %d" ,a); //배열 이름 출력 

return 0; 
} 

printf("배열 이름: %d" ,a); //배열 이름 출력

배열 이름이라는게 정확히 무슨 의미인지 모르겠군요..

여기서 a는 배열 이름을 가르키는 변수가 아니라
array를 가르키고 있습니다.

고로 a하고 &a[0]는 같다고 보시면 되고..

당연히 결과 값도

&a[0]하고 a하고 같은 값이 나옵니다.

다 덤벼! 다 받아줄께!!

min2to의 이미지

Quote:
여기서 a는 배열 이름을 가르키는 변수가 아니라
array를 가르키고 있습니다.

array가 머져??.. ... 잘몰라서..

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

revizes의 이미지

Quote:
array가 머져??.. ... 잘몰라서..

배열입니다.

다 덤벼! 다 받아줄께!!

min2to의 이미지

하하하!!! .... ;;;;;

이해가 않되여.. 흑흑..

Quote:

여기서 a는 배열 이름을 가르키는 변수가 아니라

array를 가르키고 있습니다.

고로 a하고 &a[0]는 같다고 보시면 되고..

당연히 결과 값도

&a[0]하고 a하고 같은 값이 나옵니다

죄송하지만.. 이 문장이// ㅠ/ㅠ

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

kane의 이미지

min2to wrote:
하하하!!! .... ;;;;;

이해가 않되여.. 흑흑..

Quote:

여기서 a는 배열 이름을 가르키는 변수가 아니라

array를 가르키고 있습니다.

고로 a하고 &a[0]는 같다고 보시면 되고..

당연히 결과 값도

&a[0]하고 a하고 같은 값이 나옵니다

죄송하지만.. 이 문장이// ㅠ/ㅠ


배열 이름은 "a"로 소스 코드 내에서만 의미가 있습니다. 배열 이름을 출력한다는 표현이 오히려 더 이해가 안됩니다.

a는 배열 '이름'을 가르키는게 아니라 배열 '자체'를 가르킨다는 뜻입니다. 배열 자체란 배열의 시작 주소를 의미한다고 보시면 됩니다. 따라서 (배열 시작 주소) a와 (배열 첫번째 요소의 주소) &a[0]가 같게 나옵니다.

Kroisse의 이미지

사소한 태클 하나.

min2to wrote:

printf("%d, %d ,a[0], a[1]); //배열요소 출력

printf("%d, %d , &a[0], &a[1]);// 배열요소의 주소 출력

printf("배열 이름: %d ,a); //배열 이름 출력

이거 정말로 돌아가긴 하는 걸까요? -_- 큰따옴표가 하나씩 없어 보입니다만...

진짜 답변

메모리 주소 | 값 |
0x어쩌구   |  0 |  <- &a[0] <- (a + 0) <- a
0x저쩌구   |  1 |  <- &a[1] <- (a + 1)
0x이러쿵   |  2 |  <- &a[2] <- (a + 2)
0x저러쿵   |  3 |  <- &a[3] <- (a + 3)
0x어이쿠   |  4 |  <- &a[4] <- (a + 4)

뭐, 포인터 정도는 어느 정도 이해를 하시고 계시다는 가정 하에
대충 이런 겁니다.

a가 마치 배열의 첫 원소를 가리키는 상수 포인터처럼 동작합니다.

따라서 이게 가능하죠.

int sum(int *array, int size) {
    int result;

    for(int i = 0; i < size; i++) {
        result = result + array[i];
    }
    return result;
}

...

int a[5] = {0, 1, 2, 3, 4};
int s = sum(a, 5); // 배열 이름을 포인터처럼 사용!
cout << s << endl;

결과 :
10
Gr2의 이미지

int a[5]={0,1,2,3,4}
는 메모리에 저장될 때 4 byte x5 = 20 byte로 저장되고
저장된 메모리의 선두 번지를
a가 포인터하게됩니다..
그럼.. a 는 포인터 변수가 된다는 것인데..
..저도 자세히는 모르겠네요....

min2to의 이미지

kane wrote:
min2to wrote:
하하하!!! .... ;;;;;

이해가 않되여.. 흑흑..

Quote:

여기서 a는 배열 이름을 가르키는 변수가 아니라

array를 가르키고 있습니다.

고로 a하고 &a[0]는 같다고 보시면 되고..

당연히 결과 값도

&a[0]하고 a하고 같은 값이 나옵니다

죄송하지만.. 이 문장이// ㅠ/ㅠ


배열 이름은 "a"로 소스 코드 내에서만 의미가 있습니다. 배열 이름을 출력한다는 표현이 오히려 더 이해가 안됩니다.

a는 배열 '이름'을 가르키는게 아니라 배열 '자체'를 가르킨다는 뜻입니다. 배열 자체란 배열의 시작 주소를 의미한다고 보시면 됩니다. 따라서 (배열 시작 주소) a와 (배열 첫번째 요소의 주소) &a[0]가 같게 나옵니다.

.. 감사합니다.. 근데.. 햇갈리네여.. 흑흑..

전부다 저런 방식으로 나오나여??... 제가 본 [배열]파트에서..

공부한거랑.. 많이 틀린느낌을 받아서..... 여하튼.. 정말 감사드립니다..

좋은하루 보내세여.. ~~

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

Kroisse의 이미지

가만히 생각해보니,

min2to wrote:
printf("배열 이름: %d ,a); //배열 이름 출력

데체 이 문장에서 어떤 값이 출력되길 기대하셨는지 정말 궁금해지는군요. :?

min2to의 이미지

Kroisse wrote:
가만히 생각해보니,
min2to wrote:
printf("배열 이름: %d ,a); //배열 이름 출력

데체 이 문장에서 어떤 값이 출력되길 기대하셨는지 정말 궁금해지는군요. :?

열혈강의 C에서.. 이런값이 출력되더라구여..
포인터와 배열.. 에서

1245036

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

Kroisse의 이미지

min2to wrote:
Kroisse wrote:
가만히 생각해보니,
min2to wrote:
printf("배열 이름: %d ,a); //배열 이름 출력

데체 이 문장에서 어떤 값이 출력되길 기대하셨는지 정말 궁금해지는군요. :?

열혈강의 C에서.. 이런값이 출력되더라구여..
포인터와 배열.. 에서

1245036

위에서도 설명드렸지만, 그 값이 바로 a라는 배열의 가장 첫 원소의 주소입니다. -_-;
아마 그 책을 보면 &a[0]도 1245036이라고 쓰여 있을 겁니다.

더불어, 항상 같은 위치에 변수가 할당될 리 없으므로 그 값은 실행할 때마다 달라집니다.

min2to의 이미지

int main (void)
{
int a[5]={0,1,2,3,4}; ///<-이거뜻이여 int* a[5]={0,1,2,3,4}; 마찬가지져?
포인터 선언..
printf("%d, %d ,a[0], a[1]);

printf("%d, %d , &a[0], &a[1]); /// 이건 반환.. 0,1 포인터..

printf("배열 이름: %d ,a); // 이건 a[0]을 가진 값..

이렇게 이해하면.. 되겟져??..!!

정말.. 죄송합니다.. 포인터 한지.. 3일정도 되었는데.. 맨날

그자리에 머물러 있어서.. 질문을.. 흑흑..

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

Prentice의 이미지

#include <stdio.h>

int main(void)
{
	int a[5]={0, 1, 2, 3, 4};

	printf("a[]:\t\t%d, %d\n", a[0], a[1]);
	printf("&a[] %%d:\t%d, %d\n", &a[0], &a[1]);
	printf("&a[] %%p:\t%p, %p\n", &a[0], &a[1]);
	printf("a %%d:\t\t%d\n", a);
	printf("a %%p:\t\t%p\n", a);
	return 0;
}

제 결과:
a[]:		0, 1
&a[] %d:	2289392, 2289396
&a[] %p:	0x22eef0, 0x22eef4
a %d:		2289392
a %p:		0x22eef0
Prentice의 이미지

min2to wrote:
int main (void)
{
int a[5]={0,1,2,3,4}; ///<-이거뜻이여 int* a[5]={0,1,2,3,4}; 마찬가지져?

아닙니다. int *a[5]면 포인터의 배열이 돼버려요.

min2to wrote:
printf("배열 이름: %d ,a); // 이건 a[0]을 가진 값.. 이렇게 이해하면.. 되겟져??..!!

아뇨. a[0]을 가진 값이라는 것이 뭔가요..?

min2to wrote:
정말.. 죄송합니다.. 포인터 한지.. 3일정도 되었는데.. 맨날 그자리에 머물러 있어서.. 질문을.. 흑흑..

저는 포인터 이해하기 위해 몇년 가까이 걸렸습니다. 차근차근 봐보세요.
kane의 이미지

min2to wrote:
int a[5]={0,1,2,3,4}; ///<-이거뜻이여 int* a[5]={0,1,2,3,4}; 마찬가지져?

int a[5] : int 배열
int* a[5] : int 포인터 배열
마찬가지가 아니죠.
Quote:
int* a;
a = malloc(sizeof(int) * 5);
a[0] = 0; a[1] = 1; ...; a[4] = 4;

정도가 되야 마찬가지가 되겠죠.
min2to의 이미지

Quote:

저는 포인터 이해하기 위해 몇년 가까이 걸렸습니다. 차근차근 봐보세요.

그럼..여..

음. .웃긴 질문 같지만.. ..

제가 지금.. 대충 아는게.. 반복문까지는 알거든여..

그럼 이시점에서.. 포인터로만 나가는 책을 구입해서 보는게

한가지의 지름길이 될까여?.... 아님 그냥.. 포인터 부분 넘긴다음에..

이해하고.. 책을.. 구입하는게.. 날까여..? ..

[구입해도 노력 여부겟지만..]

현재로는 포인터부분이. .막막해서.. 배열하고.. 흠..

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

kane의 이미지

min2to wrote:
Quote:

저는 포인터 이해하기 위해 몇년 가까이 걸렸습니다. 차근차근 봐보세요.

그럼..여..

음. .웃긴 질문 같지만.. ..

제가 지금.. 대충 아는게.. 반복문까지는 알거든여..

그럼 이시점에서.. 포인터로만 나가는 책을 구입해서 보는게

한가지의 지름길이 될까여?.... 아님 그냥.. 포인터 부분 넘긴다음에..

이해하고.. 책을.. 구입하는게.. 날까여..? ..

[구입해도 노력 여부겟지만..]

현재로는 포인터부분이. .막막해서.. 배열하고.. 흠..


저한테 하신 질문은 아니지만..

저는 같은 책을 3번 반복해서 읽었습니다. 처음에는 반 정도 이해했고, 두번째는 포인터 빼고 이해했고, 세번 읽으니 어느 정도 알겠더군요.
쉬운 책을 읽으면서 최대한 이해하려고 노력해보세요. 그림도 그려보고 코드도 따라 짜 보고.
감이 잡히면 좋은 책을 사서 두고두고 읽으시고요.

min2to의 이미지

조언 감사합니다.~~

한번!! 계속 읽어보겟습니다.. !!

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

tinywolf의 이미지

하하하.. 열심히 하시는 군요..

열혈학생 등장인가...

ㅡ_ㅡ;

min2to의 이미지

Quote:
Kroisse wrote:
사소한 태클 하나.

min2to wrote:

printf("%d, %d ,a[0], a[1]); //배열요소 출력

printf("%d, %d , &a[0], &a[1]);// 배열요소의 주소 출력

printf("배열 이름: %d ,a); //배열 이름 출력

이거 정말로 돌아가긴 하는 걸까요? -_- 큰따옴표가 하나씩 없어 보입니다만...

지금 보니.. 죄송합니다!! .. 제가.. 그때.. 무지하게..졸았나보네여..

printf("%d, %d \n",a[0], a[1]); //배열요소 출력 
 
 printf("%d, %d \n", &a[0], &a[1]);// 배열요소의 주소 출력
 
 printf("배열 이름: %d \n" ,a); 

이게.. 원판인데.. 죄송합니다..
(이긍.. 머저리 라고 해도.. 할말이 없습니다..)

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

wslee의 이미지

간단히 c에서 배열이름은 배열에 대한 포인터로 사용됨

min2to의 이미지

그냥.. 책 한권 구입해서.. 봐야될꺼 같네여

그냥 건너뗘서.. 볼려니.. 찝찝하고... 계속보니.. 머리만 아프고...흑흑..

[[[[열혈강의 포인터 책!!!]]]]]

흑흑... 혹시.. 읽어보신분 계시나여?.. 아님.. 딴 포인터... 책 추천좀..

해주십시요.. 선배님들..!! 부탁드립니다!!..

베스터터터터 셀러급..정도.? ㅎ;;;;;;~~~~

아직.. 제가 초초초초초보라..

영어로된 문서는 말고여.. 흐흐...(죄송합니다.. __;;)

가난한 백수의 .. 생활..... 또.. 못난.... 자식. .부모님한테..

3만언을. .타써야 되다니...

불효자는 웁니다.. 엉엉..~~;;;;;;

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

Cernie의 이미지

음.. 지금 어떤 책을 보시는 지 모르겠지만.. 그 책에도 포인터와 배열을 관계가 나와있지 않나요? C책이면 포인터 얘기가 당연히 있을 것이고, 포인터 얘기가 있으면 배열과 포인터 얘기도 있을텐데...

그냥 그 책을 다시 한번 찬찬히 읽어보시고 인터넷에서 관련 문서를 뒤지시는게 나을 듯. ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.