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

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

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

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

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

typedef struct node
{
  int data;
  struct node* next;// 這個(gè)地方注意結(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));// 本來(lái)以為錯(cuò)誤在這個(gè)地方,原來(lái)是理解錯(cuò)了
    /* 這句話是給pTemp重新賦值,所以在for里邊和for外邊定義pTemp是無(wú)所謂的 */
    pTemp->data = i*10;
    pTemp->next = NULL;
    if (NULL == pHder)
    {
      pHder = pTemp;// 錯(cuò)誤的關(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宏(全大寫(xiě))
  createLinklist(pHeader, 10);//這是個(gè)很典型的錯(cuò)誤,錯(cuò)誤的原因就在這
  /* pHeader是一個(gè)Node*型的變量 */
  /* 既然是個(gè)變量,那么在傳遞參數(shù)的時(shí)候,編譯器必然會(huì)給這個(gè)變量制作一個(gè)臨時(shí)副本 */
  /* 假設(shè)這個(gè)臨時(shí)副本是_pHeader_ */
  /* 在剛剛傳遞進(jìn)去的時(shí)候,pHeader和_pHeader_是相同的 */
  /* 但是在動(dòng)態(tài)申請(qǐng)內(nèi)存之后,_pHeader_指向了新的地址 [[注意]] 它不是在修改_pHeader_指向的內(nèi)容的值,而是修改_pHeader_所指向的地址 */
  /* 而此時(shí)pHeader仍然指向原來(lái)的地址 */
  /* 所以,其實(shí)在createLinklist的整個(gè)運(yùn)行過(guò)程中pHeader都沒(méi)有受到影響 */
  print(pHeader);

  return 0;
}

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    C語(yǔ)言實(shí)現(xiàn)俄羅斯方塊

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

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

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