欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言創(chuàng)建鏈表錯誤之通過指針參數(shù)申請動態(tài)內(nèi)存實例分析

 更新時間:2014年09月15日 15:06:11   投稿:shichen2014  
這篇文章主要介紹了C語言創(chuàng)建鏈表錯誤之通過指針參數(shù)申請動態(tài)內(nèi)存,是鏈表創(chuàng)建過程中非常常見的經(jīng)典錯誤。實例中做了較為詳盡的分析,需要的朋友可以參考下

本文實例講述了C語言創(chuàng)建鏈表中經(jīng)典錯誤的通過指針參數(shù)申請動態(tài)內(nèi)存,分享給大家供大家參考之用。具體實例如下:

#include <stdio.h>
#include <stdlib.h>// 用malloc要包含這個頭文件

typedef struct node
{
  int data;
  struct node* next;// 這個地方注意結(jié)構(gòu)體變量的定義規(guī)則
} 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;// 錯誤的關(guān)鍵
    }
    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*型的變量 */
  /* 既然是個變量,那么在傳遞參數(shù)的時候,編譯器必然會給這個變量制作一個臨時副本 */
  /* 假設(shè)這個臨時副本是_pHeader_ */
  /* 在剛剛傳遞進去的時候,pHeader和_pHeader_是相同的 */
  /* 但是在動態(tài)申請內(nèi)存之后,_pHeader_指向了新的地址 [[注意]] 它不是在修改_pHeader_指向的內(nèi)容的值,而是修改_pHeader_所指向的地址 */
  /* 而此時pHeader仍然指向原來的地址 */
  /* 所以,其實在createLinklist的整個運行過程中pHeader都沒有受到影響 */
  print(pHeader);

  return 0;
}

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

相關(guān)文章

  • C++枚舉類型enum與enum class的使用

    C++枚舉類型enum與enum class的使用

    這篇文章主要介紹了C++枚舉類型enum與enum class的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • C++實現(xiàn)LeetCode(104.二叉樹的最大深度)

    C++實現(xiàn)LeetCode(104.二叉樹的最大深度)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(104.二叉樹的最大深度),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++深入淺出講解希爾排序算法的實現(xiàn)

    C++深入淺出講解希爾排序算法的實現(xiàn)

    希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經(jīng)過改進之后的一個更高效的版本,也稱為縮小增量排序,同時該算法是沖破O(n2)的第一批算法之一。本文會以圖解的方式詳細介紹希爾排序的基本思想及其代碼實現(xiàn)
    2022-05-05
  • 通俗易懂講解C語言與Java中二叉樹的三種非遞歸遍歷方式

    通俗易懂講解C語言與Java中二叉樹的三種非遞歸遍歷方式

    二叉樹是一種非常重要的數(shù)據(jù)結(jié)構(gòu),很多的數(shù)據(jù)結(jié)構(gòu)都是基于二叉樹的基礎(chǔ)演變過來的。二叉樹的前,中,后3種遍歷方式,因為樹的定義本身就是遞歸定義的,所以采用遞歸的方法來實現(xiàn)是很簡單的
    2021-09-09
  • C++關(guān)鍵字typename的深入理解

    C++關(guān)鍵字typename的深入理解

    本篇文章是對C++中的關(guān)鍵字typename進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)俄羅斯方塊

    C語言實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C語言實現(xiàn)多線程定時器實例講解

    C語言實現(xiàn)多線程定時器實例講解

    在本篇文章里小編給各位分享的是一篇關(guān)于C語言實現(xiàn)多線程定時器實例講解內(nèi)容,有需要的朋友們可以參考學習下。
    2021-01-01
  • 最新評論