C言語のtypedef
typedefは、行のデータ型は導入されず、データ型に別名を作成します.
本を読むとき、次のようなカスタムデータ型に遭遇しました.
変数を定義するとき、どうなりますか?関数パラメータを渡す場合、データは値で渡されますか?それともポインタだけが渡されますか?ちょっと戸惑いましたが、配列と似ていると思います.そこでセグメントコードを書き、このカスタムタイプと配列を一緒にテストします.(試験環境Ubuntu 14.04 64ビット)
コンパイル後に実行:
やはり配列と同じです.
Stタイプのデータを定義する場合、sizeofを使用して20 Byte(5*sizeof(int))のデータサイズを計算します(構造配列が定義されています).パラメータを渡す場合、ポインタが渡されます.このStタイプは配列の動作原理にそっくりです.
本を読むとき、次のようなカスタムデータ型に遭遇しました.
typedef struct {
int data_a;
}St[MAXSIZE];
変数を定義するとき、どうなりますか?関数パラメータを渡す場合、データは値で渡されますか?それともポインタだけが渡されますか?ちょっと戸惑いましたが、配列と似ていると思います.そこでセグメントコードを書き、このカスタムタイプと配列を一緒にテストします.(試験環境Ubuntu 14.04 64ビット)
/* typedef */
#include <stdio.h>
#define MAXSIZE 5
typedef struct {
int data_a;
}St[MAXSIZE]; /* */
/* ss is */
void Output(St ss, int is[])
{
int i;
for (i = 0; i < MAXSIZE; i++) {
printf("%d %d
", ss[i].data_a, is[i]);
}
printf("
");
}
/* ss is */
void Change(St ss, int is[])
{
int i;
printf("sizeof(ss) = %lu, sizeof(is) = %lu
",
sizeof(ss), sizeof(is));
for (i = 0; i < MAXSIZE; i++) {
++ss[i].data_a;
++is[i];
}
}
int main(void)
{
int i;
St ss; //
int is[MAXSIZE]; // int
printf("sizeof(s) = %lu
", sizeof(ss));
printf("sizeof(is) = %lu
", sizeof(is));
/* s */
for (i = 0; i < MAXSIZE; i++) {
ss[i].data_a = i;
is[i] = i;
}
Output(ss, is); // ss
Change(ss, is); // ss
Output(ss, is); // ss
return 0;
}
コンパイル後に実行:
$ ./01
sizeof(ss) = 20 // St
sizeof(is) = 20 // int
0 0
1 1
2 2
3 3
4 4
sizeof(ss) = 8, sizeof(is) = 8 // St int ( 64 )
1 1
2 2
3 3
4 4
5 5
やはり配列と同じです.
Stタイプのデータを定義する場合、sizeofを使用して20 Byte(5*sizeof(int))のデータサイズを計算します(構造配列が定義されています).パラメータを渡す場合、ポインタが渡されます.このStタイプは配列の動作原理にそっくりです.