C語言 結構體使用malloc動態申請內存時,關於如何初始化結構體的解決方法


2. 使用memset函數

2.1 memset函數詳解

  • 2.1.1 函數原型:void *memset(void *str,int nur,size_t n);
  • 2.1.2 所在頭文件:string.h 或 memory.h
  • 2.1.3 作用:將str中前n個字節替換為nur並返回str
  • 2.1.4 優點:是對較大的結構體或數組進行清零操作的一種最快方法
  • 2.1.4 注意事項:由於nur是int類型的,需要注意以下兩點:
    • 2.1.4.1 若str指向的地址是char類型的,nur的值可以是任意字符值;

    • 2.1.4.2 若s指向的地址不是char類型,nur的值只能是-1或者0。

    • 原因:因為-1和0轉化成二進制后每一位都是一樣的,設int型占4個字節,則-1=0XFFFFFFFF, 0=0X00000000。

2.2 實例

memset( str,0,sizeof(str) );
將上面的studentPointer指向的動態申請的內存初始化
memset( studentPointer,0,sizeof(struct student) );
運行結果

運行結果

3. 使用calloc函數

3.1 函數詳解

  • 函數原型:void* calloc(unsigned int num,unsigned int size)
  • 所在頭文件:stdlib.h
  • 動態申請內存函數之一,相當於用malloc函數申請並且初始化一樣,calloc函數會將申請的內存全部初始化為0;
  • 因此,可以直接用calloc函數,不用malloc函數,兩者的區別就是一個會將申請的內存初始化,一個不會,大家按自己的需要來使用。

3.2 實例

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct node {
	char name[10];
	int number;
	struct node *next;
};
void main() {
	struct node *Herd;
	Herd = (struct node *)calloc(1, sizeof(struct node));
	system("pause");
}
運行結果

在這里插入圖片描述

本人撰寫博客純粹為記錄自己在學習過程的遇到的困難、問題的解決辦法。如有錯誤,請大家不吝指教!謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM