c++ int p[10]; 에서 포인터 상수에 값을 대입 질문 </tr>

gyxor의 이미지

#include<iostream>

 using namespace std;

 int main()

{

int p[10];

int r[10]={9};

cout << p[0] << "=>주소값 "  << p <<"\n";

cout << r[0] << "=>주소값 "  << r <<"\n" ;

p=r;

cout << p[0] << "=>주소값 "  << p << "\n";

cout << r[0] << "=>주소값 "  << r ;

 
return 0;

}

이러한 예문에서 예전 컴파일러에서 실행해보면 p=r; 이라는건 무조건 에러였습니다.
그런데 이번에 새로 설치한 gcc 로 헤더파일도 iostream.h --> iostream 으로
바꿔서 컴파일해보니까 되는것이었습니다.
혹시몰라서 주소값을 출력해보니까 p가 고유의 주소값을 유지한다는것을
알 수 있었습니다.
그렇다면 단순히 주소를 대입시키는 차원이아니라 주소를 유지한채
마치 strcpy함수처럼 순수한 값에의한 대입이 이루어 지고 있다는것인데요..

물론 제가 다른 borlandc3.1 이나 visual 6.0 이나

다른 gcc (버젼은 모르겠음)

에서 해보면 에러입니다.

유일하게 되는것은 yahoo 에서 djgpp 검색했을때 3,4번째

사이트에서 받은.. (구버젼으로 추정됨) gcc에서만

에러없이 위 내용이 가능했습니다.

컴파일러마다의 차이는 인정합니다. 궁금한것은

위 사항같은경우 = 연산자에 대한 operator 함수가

기본적으로 제공되지 않는다면 불가능한 사항이 아니겠습니까?

그러니까 gcc컴파일러에 ..그러한(기본제공) 부분이 있어서 위 사항이

가능했다.. 고 이해하면 되겠습니까?

저도 더 깊은 부분까지 지금 다 해결하려는건 아닙니다..

하지만 어느정도의 결론을 이끌어내고 싶어서 질문드립니다.

답변 부탁드립니다.

pynoos의 이미지

저도 c++에서 추가된 array 관련 article은 읽고서 쓰는 것은 아닙니다.

다만, 몇가지 test해본 결과

두 array의 type (내용 type과 크기)이 일치할 경우를 같은 변수로 보고

위 코드의 sizeof(p) 한 만큼의 값을 shallow copy (memcpy) 하는 것 같습니다.

변수가 만약, 사용자 정의된 class인 배열이라면, 각 copy마다 생성자가 불리는지는 모르겠군요.. 성질같아선 불릴것 같습니다만... ^^

array에 이런 특징이 있는 줄 몰랐는데요. 좋은 예제 감사합니다.

B00m의 이미지

위와 같이 배열로 잡은 변수들의 메모리주소는 존재하지만..

그 주소가 변수가 아닌 어떤 값일 뿐이므로 위와 같이 하는것은 잘못된것입니다.

즉,
int a;
100 = a;
뭐 이런식의 표현이 안되는것고 같은 것이라고 보면 될것같습니다.

(말 재주가 없어서.. 어떻게 설명하기가 힘드네요..ㅡㅡ; )

단지, 컴파일러에 따라 위와 같은 표현을 memcpy 처럼 작동하게 정의 되어 있는 컴파일러가 있는것 같습니다.

댓글 달기

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