ページ

2010年10月27日水曜日

[C/C++]ポインタのポインタとポインタ配列

このエントリーをはてなブックマークに追加

//===============================================
// (i)
// iの領域がsizeof(int) * 10バイト
//===============================================
int * i;
i = (int *)malloc(sizeof(int) * 10);

*(i + 0) = 0;
*(i + 1) = 1;

free(i);



//===============================================
// (ii)
// iの要素の領域がsizeof(int)バイト
//===============================================
int ** i;

i = (int **)malloc(sizeof(int *) * 10);
for(int j = 0; j < 10; j++){
*(i + j) = (int *)malloc(sizeof(int));
}

*(*(i + 0)) = 0;
*(*(i + 1)) = 1;

for(int j = 9; j > 0; j--){
free(*(i + j));
}

free(i);



//===============================================
// (iii)
// iの要素の領域がsizeof(int)バイト
//===============================================
int * i[10];

for(int j = 0; j < 10; j++){
i[j] = (int *)malloc(sizeof(int));
}


*i[0] = 0;
*i[1] = 1;


for(int j = 9; j > 0; j--){
free(i[j]);
}



//===============================================
// (iv)
// strが(sizeof(int) + sizeof(int)) * 10 バイト
//===============================================
struct STR{
int x;
int y;
};

int main(){

STR * str;
str = (STR *)malloc(sizeof(STR) * 10);

(*(str + 0)).x = 0; (*(str + 0)).y = 0;
(*(str + 1)).x = 1; (*(str + 1)).y = 1;

free(str);

return 0;
}



//===============================================
// (v)
// strの要素が(sizeof(int) + sizeof(int)) バイト
//===============================================
struct STR{
int x;
int y;
};


int main(){

STR ** str;
str = (STR **)malloc(sizeof(STR *) * 10);
for(int j = 0; j < 10; j++){
*(str + j) = (STR *)malloc(sizeof(STR));
}

(*(str + 0))->x = 0; (*(str + 0))->y = 0;
(*(str + 1))->x = 1; (*(str + 1))->y = 1;

for(int j = 9; j > 0; j--){
free(*(str + j));
}
free(str);


return 0;
}



//===============================================
// (vi)
// strの要素が(sizeof(int) + sizeof(int)) バイト
//===============================================

struct STR{
int x;
int y;
};


int main(){

STR * str[10];
for(int j = 0; j < 10; j++){
str[j] = (STR *)malloc(sizeof(STR));
}

str[0]->x = 0; str[0]->y = 0;
str[1]->x = 1; str[1]->y = 1;

for(int j = 9; j > 0; j--){
free(str[j]);
}

return 0;
}

0 件のコメント:

コメントを投稿