C語言學習第017課——C語言提高
阿新 • • 發佈:2021-01-22
typedef的用法
定義指標型別
定義兩個char*的變數,p1和p2,使用C++程式碼列印一下他倆的型別:
#include <iostream>
#include<typeinfo>
using namespace std;
int test(){
char* p1,p2;
cout<< typeid(p1).name() <<endl;
cout<< typeid(p2).name() <<endl;
}
int main()
{
test() ;
return 0;
}
執行結果:
這是為什麼呢?
定義指標還有一種寫法:
char *p1;
所以也就可以理解為,char修飾的是p1和p2, “*” 修飾的才是指標
如果想讓兩個列印結果都是Pc的話,應該這樣定義:
int test(){
char *p1,*p2;
cout<< typeid(p1).name() <<endl;
cout<< typeid(p2).name() <<endl;
}
或者直接用typedef將char* 起一個別名,原理和上面程式碼一樣的
#include <iostream>
#include<typeinfo>
using namespace std;
typedef char* PCHAR;
int test(){
PCHAR p1,p2;
cout<< typeid(p1).name() <<endl;
cout<< typeid(p2).name() <<endl;
}
定義特殊型別
例如:在一個平臺上編譯程式碼,需要用到long long 型別,而且用到不少這樣的型別,但是在其他平臺編譯程式碼,庫裡面不支援這個long long型別,只支援int型別,這個時候只需要使用typedef給long long型別起一個別名
typedef long long MYLONG;
在之後需要定義long long型別的資料的時候,直接使用MYLONG定義
如果需要在另一個平臺編譯,只需修改:
typedef int MYLONG;
這一行就OK了
void資料型別的用法
void字面意思是無型別,void* 無型別指標,無型別指標可以指向任何型別的資料,
void定義變數是沒有任何意義的,當你定義void a,編譯器會報錯,因為編譯器不知道分配多少記憶體給變數。
void真正用在以下兩個方面:
- 對函式返回的限定
- 對函式引數的限定
編譯器不知道分配多少記憶體的情況
上面說到一個使用void定義變數,編譯器報錯,以為不知道分配多少記憶體
還有一種情況
struct Person{
char name[64];
int age;
struct Person p;
};
這種巢狀本身的結構體,編譯器也不知道分配多少記憶體,因為如果一直往裡迴圈的話,人自己都算不出來要分配多少記憶體。