1. 程式人生 > 其它 >C語言學習第017課——C語言提高

C語言學習第017課——C語言提高

技術標籤:C語言提高c語言

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;
};

這種巢狀本身的結構體,編譯器也不知道分配多少記憶體,因為如果一直往裡迴圈的話,人自己都算不出來要分配多少記憶體。