dm03_數據類型分類和封裝

數據類型的用途
//數據類型的本質:固定大小內存塊的別名
// b &b 數組數據類型 (定義一個1 數組類型 2數組指針  3 數組類型和數組指針類型的關係) ====>壓死初學者的三座大山  拋磚

// b+1  &b+1 結果不一樣  

//b &b所代表的數據類型不一樣                                     

//b 代表的數組首元素的地址                                        

//&b代表的是整個數組的地址  

 

#include "stdlib.h"
#include "stdio.h"
#include "string.h"

// 數據類型的用途
//數據類型的本質:固定大小內存塊的別名
// b &b 數組數據類型 (定義一個1 數組類型 2數組指針  3 數組類型和數組指針類型的關係) ====>壓死初學者的三座大山  拋磚
//

void main31()
{
	int a; //告訴c編譯器分配4個字節的內存
	int b[10] ; //告訴c編譯器分配40個自己內存

	printf("b:%d, b+1:%d, &b:%d, &b+1:%d \n", b, b+1, &b, &b+1);

	printf("sizeof(b):%d \n", sizeof(b));  //40
	printf("sizeof(a):%d \n ", sizeof(a)); //4
	 
	// b+1  &b+1 結果不一樣  //b &b所代表的數據類型不一樣
	//b 代表的數組首元素的地址
	//&b代表的是整個數組的地址  

	//
	printf("hello....\n");
	system("pause");
}

 

 

2 數據類型起別名

#include "stdlib.h"
#include "stdio.h"
#include "string.h"
//簡單數據類型起別名
typedef int u32;


//複雜數據類型起別名
struct Teacher1
{
	char name[64];
	int age;

};

//將struct Teacher2重命名爲Teacher2
typedef struct Teacher2
{
	char name[64];
	int age;

}Teacher2;

void main()
{
	int a;
	int b[10];
	//用數據類型定義變量天經地義
	struct Teacher1 t1;
	t1.age = 30;


	Teacher2 t2;
	t2.age = 40;

	printf("sizeof(u32):%d\n", sizeof(u32));
	printf("hello....\n");
	system("pause");
}

 

數據類型的封裝

  • 1、void的字面意思是“無類型”,void *則爲“無類型指針”,void *可以指向任何類型的數據。
  • 2、用法1:數據類型的封裝

                 int InitHardEnv(void **handle);

     典型的如內存操作函數memcpy和memset的函數原型分別爲

                  void * memcpy(void *dest, const void *src, size_t len);

                  void * memset ( void * buffer, int c, size_t num ); 

  • 3、用法2:  void修飾函數返回值和參數,僅表示無。

       如果函數沒有返回值,那麼應該將其聲明爲void型

       如果函數沒有參數,應該聲明其參數爲void

       int function(void)

       {return 1;}

  • 4、void指針的意義

      C語言規定只有相同類型的指針纔可以相互賦值

      void*指針作爲左值用於“接收”任意類型的指針

      void*指針作爲右值賦值給其它指針時需要強制類型轉換

      int *p1 = NULL;

      char *p2 = (char *)malloc(sizoeof(char)*20);

  • 5、不存在void類型的變量

      C語言沒有定義void究竟是多大內存的別名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章