程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話創立鏈表毛病之經由過程指針參數請求靜態內存實例剖析

C說話創立鏈表毛病之經由過程指針參數請求靜態內存實例剖析

編輯:關於C++

C說話創立鏈表毛病之經由過程指針參數請求靜態內存實例剖析。本站提示廣大學習愛好者:(C說話創立鏈表毛病之經由過程指針參數請求靜態內存實例剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話創立鏈表毛病之經由過程指針參數請求靜態內存實例剖析正文


本文實例講述了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法式數據構造與算法設計的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved