国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言創建鏈表錯誤之通過指針參數申請動態內存實例分析

2020-01-26 15:19:11
字體:
來源:轉載
供稿:網友

本文實例講述了C語言創建鏈表中經典錯誤的通過指針參數申請動態內存,分享給大家供大家參考之用。具體實例如下:

#include <stdio.h>#include <stdlib.h>// 用malloc要包含這個頭文件typedef struct node{  int data;  struct node* next;// 這個地方注意結構體變量的定義規則} Node;void createLinklist(Node* pHder, int length){  int i = 0;  Node* pTail = NULL;  Node* pTemp = NULL;  printf("create/n");  for (i = 0; i < length; i++)  {    pTemp = (Node*)malloc(sizeof(Node));// 本來以為錯誤在這個地方,原來是理解錯了    /* 這句話是給pTemp重新賦值,所以在for里邊和for外邊定義pTemp是無所謂的 */    pTemp->data = i*10;    pTemp->next = NULL;    if (NULL == pHder)    {      pHder = pTemp;// 錯誤的關鍵    }    else    {      pTail->next = pTemp;    }    pTail = pTemp;  }}void print(Node* pHeader){  Node* p = pHeader;  printf("print/n ");  while(p)  {    printf("%4d ", p->data);    p = p->next;  }  putchar('/n');}int main(void){  Node* pHeader = NULL;// C和C++中判斷指針為空都是用NULL宏(全大寫)  createLinklist(pHeader, 10);//這是個很典型的錯誤,錯誤的原因就在這  /* pHeader是一個Node*型的變量 */  /* 既然是個變量,那么在傳遞參數的時候,編譯器必然會給這個變量制作一個臨時副本 */  /* 假設這個臨時副本是_pHeader_ */  /* 在剛剛傳遞進去的時候,pHeader和_pHeader_是相同的 */  /* 但是在動態申請內存之后,_pHeader_指向了新的地址 [[注意]] 它不是在修改_pHeader_指向的內容的值,而是修改_pHeader_所指向的地址 */  /* 而此時pHeader仍然指向原來的地址 */  /* 所以,其實在createLinklist的整個運行過程中pHeader都沒有受到影響 */  print(pHeader);  return 0;}

上述實例以注釋的形式對易錯點進行了詳細的分析,相信不難理解。希望本文所述對大家C程序數據結構與算法設計的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 蚌埠市| 新巴尔虎右旗| 延寿县| 洪雅县| 响水县| 万源市| 台南市| 吕梁市| 邮箱| 钟祥市| 石林| 灵宝市| 咸宁市| 林州市| 孝义市| 龙门县| 龙泉市| 台江县| 建湖县| 桦南县| 垫江县| 多伦县| 辉县市| 武宁县| 青海省| 封丘县| 政和县| 韶山市| 奎屯市| 津南区| 波密县| 南华县| 兴安县| 塔城市| 正定县| 武安市| 奈曼旗| 尉氏县| 桂阳县| 长沙市| 施秉县|