매개변수가 전달이 안됩니다.

dummy999의 이미지

아래는 흥릉출판사의 자료구조책에 연결리스트를 이용한 계수 연산방법인데
초기화랑 메인은 없습니다.

지역변수형태로 p와 q를 메인에서 받고싶은데 안받아집니다.
메인에다 p와 q에대한 동적할당을 안하고 사용자함수에서 연결되었음하는데 연결이 안될까요?
매게변수 선언이 좀틀릴껍니다.

또 일일히 w,x,y 선언안하고 하나만 선언하고 두개의 문자열만으로도 이렇게 바로 바꿀수있는
방법도 부탁드립니다.

참고로 전역변수로 선언하면 되는데.. 지역변수로 해보고싶어서영

typedef struct _PTR ptr;
struct _PTR
{
	float coef;
	int exp;
	ptr *link;
};

void init(ptr *p, ptr *q)
{
	ptr *w, *x, *y; 
	p = (ptr ) malloc(sizeof(ptr));
	q = (ptr ) malloc(sizeof(ptr));

	p->coef = -3;
	p->exp = 5;
	w=(ptr *) malloc(sizeof(ptr));
	p->link = w;

	w->coef=2;
	w->exp =2;
	x =(ptr *) malloc(sizeof(ptr));
	w->link = x;

	x->coef=9;
	x->exp =1;
	y =(ptr *) malloc(sizeof(ptr));
	x->link = y;
	
	y->coef=-1;
	y->exp =0;
	y->link = NULL;

	q->coef = -2;
	q->exp = 5;
	w=(ptr *) malloc(sizeof(ptr));
	q->link = w;

	w->coef=3;
	w->exp =3;
	x =(ptr *) malloc(sizeof(ptr));
	w->link = x;

	x->coef=-4;
	x->exp =2;
	y =(ptr *) malloc(sizeof(ptr));
	x->link = y;
	
	y->coef=6;
	y->exp =0;
	y->link = NULL;
}

main()
{
	ptr *p, *q;
	init(p,q);
}

무식하게 써올린 코드에 부끄럽군영. :oops:
simpid의 이미지

이런 경우 더블 포인터(이름 맞나?)를 사용하셔야 합니다.

void init(ptr **p, ptr **q)
{
	ptr *w, *x, *y; 
	*p = (ptr ) malloc(sizeof(ptr));
	*q = (ptr ) malloc(sizeof(ptr));

        ....
}

main()
{
	ptr *p, *q;
	init(&p,&q);
}

뭐.. 대충 이런식입니다.

dummy999 wrote:
아래는 흥릉출판사의 자료구조책에 연결리스트를 이용한 계수 연산방법인데
초기화랑 메인은 없습니다.

지역변수형태로 p와 q를 메인에서 받고싶은데 안받아집니다.
메인에다 p와 q에대한 동적할당을 안하고 사용자함수에서 연결되었음하는데 연결이 안될까요?
매게변수 선언이 좀틀릴껍니다.

또 일일히 w,x,y 선언안하고 하나만 선언하고 두개의 문자열만으로도 이렇게 바로 바꿀수있는
방법도 부탁드립니다.

참고로 전역변수로 선언하면 되는데.. 지역변수로 해보고싶어서영

typedef struct _PTR ptr;
struct _PTR
{
	float coef;
	int exp;
	ptr *link;
};

void init(ptr *p, ptr *q)
{
	ptr *w, *x, *y; 
	p = (ptr ) malloc(sizeof(ptr));
	q = (ptr ) malloc(sizeof(ptr));

	p->coef = -3;
	p->exp = 5;
	w=(ptr *) malloc(sizeof(ptr));
	p->link = w;

	w->coef=2;
	w->exp =2;
	x =(ptr *) malloc(sizeof(ptr));
	w->link = x;

	x->coef=9;
	x->exp =1;
	y =(ptr *) malloc(sizeof(ptr));
	x->link = y;
	
	y->coef=-1;
	y->exp =0;
	y->link = NULL;

	q->coef = -2;
	q->exp = 5;
	w=(ptr *) malloc(sizeof(ptr));
	q->link = w;

	w->coef=3;
	w->exp =3;
	x =(ptr *) malloc(sizeof(ptr));
	w->link = x;

	x->coef=-4;
	x->exp =2;
	y =(ptr *) malloc(sizeof(ptr));
	x->link = y;
	
	y->coef=6;
	y->exp =0;
	y->link = NULL;
}

main()
{
	ptr *p, *q;
	init(p,q);
}

무식하게 써올린 코드에 부끄럽군영. :oops:
sykes의 이미지

이중 포인터로 하는게 맞습니다...맞고요...^^;;

그냥 포인터로 파라미터를 넘기면은...

이놈이 call by reference 라고는 하지만...

사실은 call by value 인지라...

넘어올때 받은 주소가 함수가 return 하게 되면 그대로 유지가 되는거죠

그래서 함수안에서는 malloc 으로 할당된 주소가 유지되지만

main에서는 원래대로 되는겁니다...

그래서 이걸 해결할려면 이중 포인터를 써야겠죠...

망설이지 말고 해보는거야~

댓글 달기

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