數據類型的用途
//數據類型的本質:固定大小內存塊的別名
// 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究竟是多大內存的別名