- typedef為storage class specifier
typedef static int STATIC_INT; //error: multiple storage classes in declaration specifiers
但是下面用法是可以的:
typedef int MY_INT; static MY_INT num = 3;
- 一般data type的別名
typedef unsigned long size_;
size_t intSize = sizeof(int);
printf("%size of int = %ld\n", intSize);
- 幫array別名
typedef int INT_ARR [10];
INT_ARR arr = {100};
printf("arr[0] = %d\n", arr[0]);
- pointer type的別名
typedef int *INT_PTR;
int a = 3;
INT_PTR a_ptr = &a;
printf("a = %d\n", *a_ptr);
要注意跟const混用時可能會產生預期外的結果,例如:typedef int *INT_PTR;
int arr[2] = {1, 2};
const INT_PTR arr_ptr = arr;
*arr_ptr = 0; //ok
arr_ptr++; //error: increament of read-only variable 'arr_ptr'
會這樣事因為const INT_PTR為int *const (constant pointer to integer)而非const int* (pointer to constant integer)如果想要實現const int*,用下列即可
typedef const int* cINT_PTR照本宣科也可以實現int *const
typedef int *const INT_PTRc
- struct type的別名
typedef struct account
{
char name[100];
int money;
}ACCOUNT, *ACCOUNT_PTR;
ACCOUNT myAccount = {"ga", 1000};
ACCOUNT_PTR myAccountPtr = &myAccount;
printf("%s has $%d NTD\n", myAccountPtr->name, myAccountPtr->money);
- function prototype的別名
#include <stdio.h>
int add(int, int);
typedef int MYFUNCTION(int, int);
int main()
{
MYFUNCTION *myAdd = add;
printf("3 + 2 = %d\n", (*myAdd)(3, 2));
return 0;
}
int add(int a, int b)
{
return a + b;
}
沒有留言:
張貼留言