배열과 포인터 질문 드려요

impactlife의 이미지

class Pat{
public:
	int nX, nY;
};
 
int main(){
 
	Pat *p;
 
	p = new Pat[3];
 
	//1번
	p->nX = 1;
	p->nY = 2;
 
	//2번
	(*(p+1)).nX = 3;
	(*(p+1)).nY = 4;
 
	//3번
	p[2].nX = 5;
	p[2].nY = 6;
 
	cout << p[0].nX << ", " << p[0].nY << endl;
	cout << p[1].nX << ", " << p[1].nY << endl;
	cout << p[2].nX << ", " << p[2].nY << endl;
 
	delete[] p;
 
	getch();
 
	return 0;
}

위에서 1번과 2번은 이해가 되는데요.
3번은 조금 헤깔리네요.
3번의 경우 컴파일시 2번으로 자동변환되는거라 이해하고 있는데 맞는건지요?

gilgil의 이미지

네, 같습니다.
그런데 2번보다가 3번이 사람이 보기에 더 편하지 않나요? ^^

impactlife의 이미지

감사합니다. 다행히 제가 알고 있는게 맞는거군요 ^^

mirheekl의 이미지

1, 2, 3은 모두 내부적으로는 똑같이 처리되지만 그냥 상황에 따라 표기하는 방식만 다르게 가져갈 수 있다 생각하시면 될것 같네요.

http://assembly.ynh.io/ 여기에다 소스를 쳐보시면 어셈블리로 어떻게 변환되는지 알 수 있습니다. 제가 해본 결과 모두 (사실상) 동일한 방식으로 변환되었습니다.

(1)
0013 488945E8 		movq	%rax, -24(%rbp)
0017 488B45E8 		movq	-24(%rbp), %rax
001b C7000100 		movl	$1, (%rax)
     0000
0021 488B45E8 		movq	-24(%rbp), %rax
0025 C7400402 		movl	$2, 4(%rax)
     000000
(2)
002c 488B45E8 		movq	-24(%rbp), %rax
0030 4883C008 		addq	$8, %rax
0034 C7000300 		movl	$3, (%rax)
     0000
003a 488B45E8 		movq	-24(%rbp), %rax
003e 4883C008 		addq	$8, %rax
0042 C7400404 		movl	$4, 4(%rax)
     000000
(3)
0049 488B45E8 		movq	-24(%rbp), %rax
004d 4883C010 		addq	$16, %rax
0051 C7000500 		movl	$5, (%rax)
     0000
0057 488B45E8 		movq	-24(%rbp), %rax
005b 4883C010 		addq	$16, %rax
005f C7400406 		movl	$6, 4(%rax)

--

impactlife의 이미지

헉뚜~ 이런 좋은 사이트가 있었군요.
알려주셔서 대단히 감사합니다.

february28의 이미지

포인터와 배열 헷갈리시면, 다시체계적으로배우는 포인터?인가 그책한번 봐보세요. 그책이 진실 입니다. 하지만, 좀 설명이 장황하긴해서 최적이지 못함이 있죠... 물론, 이보다 더 확실하고 쉬운방법이 있지만, 그건 스스로알아야될 부분입니다. 구지, 디버깅이나 어셈변환아니고 추상이론적으로 해결해야할때까지...

--------------------------------------------------------------------------------
open source, open teaching, 천기누설이 꿈~ 은 개뿔...
--------------------------------------------------------------------------------

김정균의 이미지

<code></code> 블럭을 사용하면 코드를 좀더 쉽게 볼 수 있습니다.

mirheekl의 이미지

감사합니다.

--

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.