程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> 二級C語言提問(11)

二級C語言提問(11)

編輯:C語言問答

二級C語言提問(11)

#include <stdlib.h>

#include<string.h>

#define   NEW   (struct  node*)malloc(sizeof(struct   node))

struct   node

{

      char    name[20] ,tel[9];

       struct    node*next;

};

struct    node  *create()

{

    struct   node   *h,*p,*q;

     char   name[20];

    h=null;

    printf("name:  ");

    gets(name);

 while(strlen(name)!=0)

  {

   p=NEW;

   if   (p==NULL)

{

    printf("Allocation   failure\n");

    exit(0);

}

strcpy(p->name,name);

printf("tel:");

gets(p->tel);

p->next=NULL;

if  (h==NULL)

   h=p;

else

q->next=p;

 q=p;

printf("name: ");

gets(name);

}

return h;

}

main()

struct  node*head;

head=create();

}

 

請問動態分配函數(struct  node*)malloc(sizeof(struct   node))前面的(struct  node*)

是什麼意思?格式是怎樣的?

 

struct    node  *create()又是什麼函數?是返回struct node型結構體指針函數嗎?

還有這個程序無法運行。。。。請檢查一下,謝謝!!!

 

最佳回答:

(struct  node*)malloc(sizeof(struct   node))
這個是強制類型轉換。
庫函數malloc的原型是:
void *malloc(size_t size);
返回值類型是void *, 而變量p的類型是node *。
C語言規定,void*類型可以轉化為任意指針類型,所以在C裡這樣寫
p=malloc(sizeof(struct   node));
是沒有問題的。但是C++裡就不行了,C++的類型要求比較嚴格,從void*到非void*的轉換必須要求顯示類型轉換,所以前面要加(struct  node*)。
雖然C中對指針類型轉換的檢查沒有C++那麼嚴格,不加也不會出錯,但是指針類型的運算(包括賦值),應保證指針類型必須一致,這是一種使用指針的良好習慣。

struct  node *create()函數的作用是建立一個單鏈表,然後返回這個單鏈表的頭結點,返回值類型是指向結構體struct node的指針。關於鏈表的知識可參考數據結構方面的書籍。

程序不能運行有兩處錯誤
    h=null;應該是h=NULL;
    printf("Allocation   failure\n");應該是printf("Allocation   failure\n");括號應該是半角的字符。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved