C言語での参照渡しについて、理解できない部分があるので
質問させてください。
以下のソースは質問する為に作成したのですが
自作関数hogehoge
もhogegege
も構造体のポインタアドレスを
引数として受け取る参照渡しをおこなっており、関数内の処理内容は
どちらも同じなのですが、返り値の型を宣言しているか・していないかで
処理結果が変わるのがどうしても理解できません。
ポインタで関数へ値を渡してやると、返り値の宣言は影響を
受けないと考えているのですが、間違っているのでしょうか?
わかりにくい質問で申し訳ないのですが、
宜しくお願いします。
#include<stdio.h> //基本ライブラ #include<stdlib.h> //malloc関数用ライブラリ typedef struct abc{ int a; int b; struct abc *NEXT; struct abc *PREV; }ABC; ABC *hogehoge(ABC *head); void hogegege(ABC *head); int main() { ABC *hoge=NULL; ABC *hoge1=NULL; ABC *hoge2=NULL; ABC *hoge3=NULL; /*hogeの場合*/ if ((hoge = (ABC *) malloc(sizeof(ABC))) == NULL){ printf("malloc error\n"); exit(EXIT_FAILURE); } hoge->a = 1; hoge->b = 1; hoge->PREV = NULL; /*hoge1の場合*/ if ((hoge1 = (ABC *) malloc(sizeof(ABC))) == NULL){ printf("malloc error\n"); exit(EXIT_FAILURE); } hoge1->a = 2; hoge1->b = 2; hoge1->PREV = hoge; hoge->NEXT = hoge1; /*hoge2の場合*/ if ((hoge2 = (ABC *) malloc(sizeof(ABC))) == NULL){ printf("malloc error\n"); exit(EXIT_FAILURE); } hoge2->a = 3; hoge2->b = 3; hoge2->PREV = hoge1; hoge1->NEXT = hoge2; /*hoge3の場合*/ if ((hoge3 = (ABC *) malloc(sizeof(ABC))) == NULL){ printf("malloc error\n"); exit(EXIT_FAILURE); } hoge3->a = 4; hoge3->b = 4; hoge3->PREV = hoge2; hoge2->NEXT = hoge3; hoge3->NEXT = NULL; hogegege(hoge); puts("現在のhogeは・・・\n"); printf("a = %d\n\n",hoge->a); hoge = hogehoge(hoge); puts("現在のhogeは・・・\n"); printf("a = %d\n\n",hoge->a); return 0; } ABC *hogehoge(ABC *head) { while(head->NEXT != NULL){ head = head->NEXT; } return head; } void hogegege(ABC *head) { while(head->NEXT != NULL){ head = head->NEXT; } return; }

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/04 00:36