함수에서 포인터를 넘겨주는데..

lacovnk의 이미지

STATUS
BMTree::_insert(node *node_target, const dtype data_x, dtype &data_y, node *&node_q);

이런 녀석이 있군요 -_-;

node는 typedef된 struct고요.

대체 *&node_q...라는 변수는 어떤걸 의미하나요?

사용은 다음과 같이 되는데..

	node *node_new, *node_final;
	dtype data_x_new, data_k_final;
	STATUS result;

blablabla...

	/*
	 * recursive call
	 */
	result = _insert(node_target->nodes[i], data_x, data_x_new, node_new);

node_new가 node*형이니, 결국은 포인터를 넘겨주는게 아닌가 싶은데..

받는 함수에서 왜 *&라고 하는지 모르겠네요. 저걸 *로 고치면 컴파일 에러는 안나지만, segmentation fault가 나고...

그리고 저걸 C로 바꾸려는데, c에서는 계속 parse에러가 나더군요.

무슨 의미인지요? 으음.

ixevexi의 이미지

혹시 포인터 스왑 함수 만들어 보신적 있으세요 ^^

#include<iostream>

using namespace std;


void p_swap(int * a, int * b);

int main()
{
    int aa = 30,
         bb = 50;
   
    int * a = & aa,
         * b = & bb;

    cout<<"a:"<< *a<<"\tb:"<<*b<<endl;

    p_swap(a , b);
 
    cout<<"a:"<< *a<<"\tb:"<<*b<<endl;
    
    return 0;
}

void p_swap( int * a, int * b)
{
    int * temp = a;
    a = b;
    b = temp
}

[b]

위의 코드가 잘 돌아갈까요? @.@

p_swap내부에서 포인터를 자체적으로 다시 복사하기 때문에
저기서 바뀌는건 내부 a,b 포인터만 바뀝니다.
보통 이런걸 방지 하기 위해서
**를 쓰는데

저는 저것 보다는 &*를 선호합니다. 이것도 역시 마찬 가지겠죠?

저 함수가 무엇인지는 모르겠지만 내부적으로는 저 포인터를 치환하는 연산을
하는 것 같습니다.[/b]

C++, 그리고 C++....
죽어도 C++

정태영의 이미지

c++에서는.. 레퍼런스라는게 있습니다..

&가 바로 레퍼런스를 나타내는 것이구요..
c에는 존재하지 않습니다..

#include <iostream>

using namespace std;

int main( int argc, char** argv ){

    int a;
    int *a_ptr;
    int &a_ref = a;

    a_ptr = &a;

    a = 3;
    cout << a << "-" << *a_ptr << "-" << a_ref << endl;

    return 0;

}

이런 코드를 돌려보심 대강 포인터랑 비슷하면서 사용법이
좀 다르단 걸 알 수 있을겁니다 ;)

결과는 3-3-3 이라고 나옵니다 :)

하튼 ** 이렇게 더블리포인터로 바꿔주시고.. 그걸 사용하는 부분들의 앞에
*을 붙여줘야겠죠 -_-;;

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

댓글 달기

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