http://blog.csdn.net/kirawoo/article/details/7439792
2012
typedef struct用法疑問typedef struct node /*鏈表節(jié)點(diǎn)定義*/
{ int a;
struct node *next;
}LNode,*LinkList;
CreatJoseph(LinkList *jsp , int n) /* 創(chuàng)建約瑟夫環(huán)*/
{.......}
insertList(LinkList *list, LinkList q, inte1, inte2)
{........}
LinkList已經(jīng)是指針類型的,為什么還要LinkList *jsp 還要再加個(gè)"*"???問題補(bǔ)充:
LinkList已經(jīng)是指向結(jié)構(gòu)體類型的指針了,直接LinkList jsp 為什么不對(duì)?jsp就是指向某個(gè)結(jié)構(gòu)體的指針,為何還要在LinkList 后再加" * "??
2012-3-26 17:06滿意回答
弄明白指針變量與指針變量的值,局部變量和全局變量的關(guān)系根據(jù)你說的情況,你只是在主調(diào)函數(shù)中定義了jsp但是并沒有為其分配地址,所以你直接傳進(jìn)去的話存在沖突,要么變量沒有被實(shí)例化,所以讀入數(shù)據(jù)錯(cuò)誤,下面先以一個(gè)簡單的結(jié)構(gòu)體來說明如:typedef struct _INT { int a;}INT, * pINT;void f(pINT app);int main(void){ pINT a; f(a); printf("%d\n", *a); return 0;}void f(pINT app){ app->a = 7; return ;}要么你在內(nèi)部函數(shù)中實(shí)例化,但是你使用的指針變量,不是變量值所以造成內(nèi)部函數(shù)使用的jsp作為局部變量,在被調(diào)函數(shù)執(zhí)行完成后jsp不見了,雖然你分配的內(nèi)存在,但是主調(diào)函數(shù)的jsp找不到被調(diào)函數(shù)為局部jsp所分配的地址,地址被浪費(fèi)了,外部卻沒有找到。#include <stdio.h>#include <stdlib.h>typedef struct _INT { int a;}INT, * pINT;void f(pINT app);int main(void){ pINT pa; f(pa); printf("p have fanished!\n"); printf("%d\n", pa->a); return 0;}void f(pINT app){ app = (pINT)malloc(sizeof(INT)); app->a = 7; return ;}/*p have fanished! 被輸出后發(fā)生運(yùn)行錯(cuò)誤*/建議改正為在創(chuàng)建的時(shí)候穿參數(shù)為元素的個(gè)數(shù)就可以了然后返回值是結(jié)構(gòu)體的指針類型如:#include <stdio.h>#include <stdlib.h>typedef struct node /*鏈表節(jié)點(diǎn)定義*/{ int a; struct node *next;}LNode,*LinkList;LinkList create(int num);void traverse_list(LinkList jsp);int main(void){ LinkList jsp = create(5); traverse_list(jsp); traverse_list(jsp); return 0;}LinkList create(int num){ LinkList pHead, tail, pNew; tail = pHead = (LinkList)malloc(sizeof(LNode)); //創(chuàng)建頭結(jié)點(diǎn) tail->next = NULL; for(int i=0; i<num; i++) { pNew = (LinkList)malloc(sizeof(LNode)); printf("Pls enter your %dth num: ", i+1); scanf("%d", &pNew->a); tail->next = pNew; tail = pNew; } tail->next = NULL; //dont foget it return pHead;}void traverse_list(LinkList jsp){ while(jsp->next != NULL) { jsp = jsp->next; printf("%d ", jsp->a); } printf("\n");}而且從本程序我們也可以看見,在后面的兩個(gè)traverse過程中都是引用jsp(LiskList型),但是外部的jsp并未被改變,所以你的那個(gè)好像是不對(duì)的 運(yùn)行結(jié)果為Pls enter your 1th num: 1Pls enter your 2th num: 2Pls enter your 3th num: 3Pls enter your 4th num: 4Pls enter your 5th num: 51 2 3 4 51 2 3 4 5Press any key to continue
聯(lián)系客服