Rumah > masalah biasa > teks badan

Apakah kegunaan typedef

DDD
Lepaskan: 2023-06-09 13:31:22
asal
5162 orang telah melayarinya

Penggunaan Typedef termasuk: 1. Jenis data asas Typedef mengambil "alias". Semua jenis data dalam bahasa C boleh menggunakan typedef untuk mentakrifkan semula nama jenis; termasuk: nama struktur struktur { };, nama unit kesatuan { };, enumerasi enum {}; 3. Typedef mengambil "alias" untuk tatasusunan;

Apakah kegunaan typedef

Persekitaran pengendalian artikel ini: sistem Windows 10, versi C++ 20, komputer dell g3.

Dalam aplikasi praktikal, typedef terutamanya mempunyai empat kegunaan berikut:

1) Jenis data asas Typedef mengambil "alias"

Dalam erti kata lain, semua jenis data dalam bahasa C boleh menggunakan kata kunci typedef untuk mentakrifkan semula nama jenis

typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
Salin selepas log masuk
Salin selepas log masuk
2) typedef mengambil "alias" untuk jenis data tersuai

Jenis data tersuai termasuk: nama struktur struktur{ };, nama unit kesatuan { };, enumerasi enum { }; kaedah untuk mentakrifkan semula nama data untuk struktur ialah:

struct students{
	char sex;
	char name[120];
	int ages;};
Salin selepas log masuk
Salin selepas log masuk

Selain itu, ia juga boleh ditakrifkan dengan typedef:

struct students{
	char sex;
	char name[120];
	int ages;}std;std.name[20]="wujunwu"
Salin selepas log masuk
Salin selepas log masuk

3) Typedef ialah Tatasusunan mengambil " alias"
struct students{
	char sex;
	char name[120];
	int ages;};typedef struct students std;std.name[20]="wujunwu"
Salin selepas log masuk
Salin selepas log masuk
4) typedef mengambil "alias" untuk penunjuk
penunjuk biasa
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
Salin selepas log masuk
Salin selepas log masuk
bersamaan dengan :
int a=2;int* pointer;pointer =&a;
Salin selepas log masuk
Salin selepas log masuk

Jika jenis data a ialah char, iaitu, char a =2; sebenarnya, program di atas dilaksanakan Dua langkah:

Langkah 1: Berikan penuding "alias"

int a=2;typedef int* pointer;pointer p;p=&a;
Salin selepas log masuk
Salin selepas log masuk
Langkah 2: Paksa penukaran jenis
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
Salin selepas log masuk
Salin selepas log masuk
Langkah 3: Berikan nilai kepada penunjuk
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
Salin selepas log masuk
Salin selepas log masuk
Ringkasan: Apabila menggunakan typedef, typedef tidak mencipta sebarang jenis baharu, ia hanya menyediakan "alias" untuk jenis sedia ada untuk digunakan dalam atur cara.


Perangkap dalam typedef

Seterusnya lihat contoh mudah penggunaan typedef, seperti yang ditunjukkan dalam kod berikut:

pCopySDMMC2Mem p1;pBL2Type p2;
Salin selepas log masuk
Salin selepas log masuk

Dalam kod di atas , adakah "const PCHAR" bersamaan dengan "const char*"?

Jawapannya ialah tidak. Typedef digunakan untuk mentakrifkan alias baharu bagi sesuatu jenis dan bukan penggantian rentetan yang mudah. Oleh itu, const dalam "const PCHAR" memberikan keseluruhan penuding itu sendiri kemalar, yang membentuk penuding malar "char* const (penunjuk malar yang menunjuk ke char)". Iaitu, ia sebenarnya bersamaan dengan "char* const", bukan "const char* (penunjuk kepada constant char)". Sudah tentu, ia juga mudah untuk menjadikan const PCHAR bersamaan dengan const char*, seperti yang ditunjukkan dalam kod berikut:
(pCopySDMMC2Mem)0xD0037F98;  //真正在写代码时不能这样写(pBL2Type)0x23E00000;
Salin selepas log masuk
Salin selepas log masuk
Malah, apabila anda mengisytiharkan typedef untuk penunjuk, ia harus berada dalam typedef akhir nama Tambah const untuk menjadikan penunjuk itu sendiri pemalar.

Perlu juga diambil perhatian bahawa walaupun typedef tidak benar-benar mempengaruhi ciri storan objek, ia masih merupakan kata kunci kelas storan dalam sintaks, sama seperti kata kunci seperti auto, extern, statik dan daftar . Oleh itu, kaedah pengisytiharan berikut tidak boleh dilaksanakan:

p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
Salin selepas log masuk
Salin selepas log masuk

Sebab mengapa ia tidak boleh dilaksanakan ialah kata kunci kelas storan berbilang tidak boleh diisytiharkan Memandangkan typedef telah pun menduduki kedudukan kata kunci kelas storan, oleh itu, dalam typedef Anda tidak lagi boleh menggunakan kata kunci kelas storan statik atau lain-lain dalam perisytiharan. Sudah tentu, pengkompil juga akan melaporkan ralat Sebagai contoh, mesej ralat dalam VC++2010 ialah "Tidak boleh menentukan berbilang kelas storan."

Perbezaan antara typedef dan #define:

(1) Nama simbol yang dicipta oleh typedef terhad kepada Jenis, tidak terhad kepada nilai
(2) typedef ditafsirkan oleh pengkompil, bukan prapemproses

Empat kegunaan typedef

Dalam aplikasi praktikal , typedef Terdapat terutamanya empat penggunaan:

1) Jenis data asas Typedef mengambil "alias"

Dengan kata lain, semua jenis data dalam bahasa C boleh menggunakan Typedef Kata Kunci untuk mentakrifkan semula nama jenis

typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
Salin selepas log masuk
Salin selepas log masuk
2) typedef mengambil "alias" untuk jenis data tersuai

Jenis data tersuai termasuk: nama struktur struktur{ } , unit kesatuan name { };, enumeration enum { };

struct students{
	char sex;
	char name[120];
	int ages;};
Salin selepas log masuk
Salin selepas log masuk

Kaedah yang biasa digunakan untuk mentakrifkan semula nama data dalam struktur ialah:

struct students{
	char sex;
	char name[120];
	int ages;}std;std.name[20]="wujunwu"
Salin selepas log masuk
Salin selepas log masuk

Selain itu, typedef juga boleh digunakan untuk mentakrifkan:

struct students{
	char sex;
	char name[120];
	int ages;};typedef struct students std;std.name[20]="wujunwu"
Salin selepas log masuk
Salin selepas log masuk
3) typedef mengambil "alias" untuk tatasusunan
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
Salin selepas log masuk
Salin selepas log masuk
4) typedef mengambil "alias" untuk penunjuk
Penunjuk biasa
int a=2;int* pointer;pointer =&a;
Salin selepas log masuk
Salin selepas log masuk

bersamaan dengan:

int a=2;typedef int* pointer;pointer p;p=&a;
Salin selepas log masuk
Salin selepas log masuk

Jika jenis data a ialah char, iaitu, char a =2 maka,

char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
Salin selepas log masuk
Salin selepas log masuk
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
Salin selepas log masuk
Salin selepas log masuk
Langkah 3: Berikan nilai kepada penuding
pCopySDMMC2Mem p1;pBL2Type p2;
Salin selepas log masuk
Salin selepas log masuk
Ringkasan: Apabila menggunakan typedef, typedef tidak mencipta sebarang jenis baharu, ia hanya menyediakan "alias" untuk jenis sedia ada supaya ia boleh digunakan dalam digunakan dalam program.


Perangkap dalam typedef

Seterusnya lihat contoh mudah penggunaan typedef, seperti yang ditunjukkan dalam kod berikut:

(pCopySDMMC2Mem)0xD0037F98;  //真正在写代码时不能这样写(pBL2Type)0x23E00000;
Salin selepas log masuk
Salin selepas log masuk

Dalam kod di atas , adakah "const PCHAR" bersamaan dengan "const char*"?

Jawapannya ialah tidak. Typedef digunakan untuk mentakrifkan alias baharu bagi sesuatu jenis dan bukan penggantian rentetan yang mudah. Oleh itu, const dalam "const PCHAR" memberikan keseluruhan penuding itu sendiri kemalar, yang membentuk penuding malar "char* const (penunjuk malar yang menunjuk ke char)". Iaitu, ia sebenarnya bersamaan dengan "char* const", bukan "const char* (penunjuk kepada constant char)". Sudah tentu, ia juga mudah untuk menjadikan const PCHAR bersamaan dengan const char*, seperti yang ditunjukkan dalam kod berikut:
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
Salin selepas log masuk
Salin selepas log masuk
Malah, apabila anda mengisytiharkan typedef untuk penunjuk, ia harus berada dalam typedef akhir nama Tambah const untuk menjadikan penunjuk itu sendiri pemalar.

Perlu juga diambil perhatian bahawa walaupun typedef tidak benar-benar mempengaruhi ciri storan objek, ia masih merupakan kata kunci kelas storan dalam sintaks, sama seperti kata kunci seperti auto, extern, statik dan daftar . Oleh itu, kaedah pengisytiharan berikut tidak boleh dilaksanakan:

typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
Salin selepas log masuk

Sebab mengapa ia tidak boleh dilaksanakan ialah kata kunci kelas storan berbilang tidak boleh diisytiharkan Memandangkan typedef telah pun menduduki kedudukan kata kunci kelas storan, oleh itu, dalam typedef Anda tidak lagi boleh menggunakan kata kunci kelas storan statik atau lain-lain dalam perisytiharan. Sudah tentu, pengkompil juga akan melaporkan ralat Sebagai contoh, mesej ralat dalam VC++2010 ialah "Tidak boleh menentukan berbilang kelas storan."

Atas ialah kandungan terperinci Apakah kegunaan typedef. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan