1樓:匿名使用者
typedef struct flightflight;
這樣就行了, scanf或printf都行, 將資料存放在棧上.或者將資料放在堆上,你也可以手動fly[flynum].num = (char*) malloc(20);scanf("%s",fly[flynum].num);printf("%s", fly[flynum].
num);就可以
2樓:veket的小號
指標不是用來存放字串的
是用來存放字串的位址的
所以 想存放字串 請 定義陣列!
3樓:
你的 num 沒有初始化,我猜預設初始化為 null 了,這裡當然是不能寫入的。
即使可以寫入,最好也是寫成字元陣列的形式,因為指標只指向乙個位址,後面的記憶體能否使用是未知的
4樓:匿名使用者
scanf("%s", &(fly[flynum].num)); /*要加「&」*/
printf("%s", fly[flynum].num); /*不要加「&」,不要加「*」*/
5樓:淺吟低唱
結構體裡int *num;沒有指向故scanf("%s",fly[flynum].num);會出錯,而為輸入其位址,就不會出錯,er你輸入的位址很可能不是有效的位址,故 printf把fly[flynum].
num列印出來會出錯
把 int *num;改為int num;
scanf("%s",fly[flynum].num);改為scanf("%s",&fly[flynum].num);
就對了;
c語言結構體指標問題,求大神賜教啊!
6樓:匿名使用者
對l的操作不能完全說是對head的操作,對於操作它們的元素時才能說是等同的,而你可以讓l指向另外乙個鍊錶。
l 一般會向「後」(l=l->next;其實是無前後這種說法的,都是在存諸中)移動,那麼有時需要返回它的第1個元素的地位址時,你只需返回head就可以了,而不必去計算你向後移動了多少單位(其實你確實可以去計算,然後返回)。
7樓:郝在益
首先,你這裡的題目給的不是很準確。
linklist到底指的是結構體了,還是結構體指標了??
如果是結構體的話,那麼下面的這句就完全的錯了。所以我猜想應該是結構體指標。
head=l=(linklist)malloc(sizeof(lnode));
的確是將head與l所指向的空間變為一樣了。但是,head我們一般是作為頭指標的,它一般都是指向某個鍊錶的第乙個結構體元素。而l卻是可以一直變換的。
這樣,無論這個鍊錶有多少個元素,我們都知道有乙個head指向它的第乙個元素,這樣也就能輕鬆訪問到鍊錶的每乙個元素了
8樓:風若遠去何人留
沒錯 從你這個寫法上可以看出 linklist應該是lnode*型別這個應該是鍊錶操作的開始部分
head一般指向頭結點,不變
而l一般指向新結點,會變化
最初始時只有乙個結點,所以用head=l的方式後續應該會對l進行操作,改變l的指向,但head的指向不會變當l本身值改變時(不是l指向的內容改變,而是l本身),l和head指向會不同,這時就不是對head的操作了
9樓:青衣風雨
兄台,完整**貼出來吧,這個樣子很難看得懂你問的是什麼。
至於head=l=malloc之後
凡是 l-> 這個樣子的操作,就是對 head-> 的操作。
但是 l = xx 這個樣子的操作,就和head完全沒有關係,因為這個時候,l已經不等於head了
另外一種是如果是在子函式中的操作,有可能你傳遞引數的方式有誤,導致對head的修改無法傳遞到函式外。
關於指標和結構體的,結構體指標和結構體中的指標的區別
dulnode 是個雙鏈表節點的結構體。大括號內是對它的定義。prior 是指向當前節點的前乙個節點的指標。next 是指向當前節點的後乙個節點的指標。定義了乙個結構型別 struct dulnode 其中dulnode就表示這個型別 等價 dulinklist表求指向這個型別的指標型別 dulno...
C語言中連結串列中的結構體指標變數問題求教
定義結構體指標變數時,只分配儲存指標型別需要的空間,比如listnode p 這裡p有給他分配儲存指標的4個位元組的空間。實際上你是要讓p指向一個結構體空間的,這個結構體空間在哪?可以先定義listnode a 然後 p a 這時p指向一個之前申請分配過空間 編譯器設定過其地址和大小,在棧空間存放著...
c語言結構體成員指標初始化問題,C語言結構體成員指標初始化問題
一中只是將name指向 jim 所在的空間,jim 已經存在了,直接將指標指向他即可,而二中是複製乙個 jim 到name所指向的空間,沒有初始化當然不行 第乙個 jim 返回的是乙個位址,是正確的。第二個記憶體分配小了。問題 一 中的student.name並未初始化,為什麼能賦值成功?stu.n...