Cステップ3:2 Dポインタ
2769 ワード
1.2 Dポインタとは
2 Dポインタは、1 Dポインタと同様にアドレスを保存する変数です.例1
1 Dポインタは変数アドレスを格納し、2 Dポインタは1 Dポインタアドレスを格納します.例2
1 Dポインタは配列アドレスを格納し、2 Dポインタはポインタ配列アドレスを格納します.
2.2 Dポインタの使い方
1.関数パラメータとして2 Dポインタ入力1次元ポインタアドレス入力1次元ポインタアドレスは、関数内部の申請の動的メモリを取り出すことができる.単一変数 を取り出すことができる.
配列を取り出すこともできます入力ポインタ配列アドレス
2.2 Dポインタを関数として返す値
2 Dポインタは、通常、ポインタ配列の戻り値タイプとして使用されます.例:m*nの単位行列の作成
3.練習は、2つの文字列の値を交換する関数 は、関数 は、関数入力正数nを実現し、デルタシンボル画像文字列配列を返す.例えば、n=4 は、関数入力正数nとmを実現し、n~m行のランダム行のランダム列のアスタリスク画像文字列配列を返す.例えば、n=4、m=9
2 Dポインタは、1 Dポインタと同様にアドレスを保存する変数です.
#include
int main(){
int n=0,m=0;
printf("&n=%p
",&n);
printf("&m=%p
",&m);
int* p = NULL;
int** pp = &p;
scanf("%p",pp);
scanf("%d",p);
printf("n=%d
m=%d
",n,m);
}
1 Dポインタは変数アドレスを格納し、2 Dポインタは1 Dポインタアドレスを格納します.
#include
int main(){
//
int arr[6] ={1,2,3,4,5,6};
int* p = arr;
for(int i=0;i<6;++i){
printf("%d
",p[i]);
}
//
int arr2[6] ={7,8,9,10,11,12};
int* parr[] = {arr,arr2};
int** pp = parr;
for(int i=0;i<2;++i){
for(int j=0;j<6;++j){
printf("%d ",pp[i][j]);
}
printf("
");
}
}
1 Dポインタは配列アドレスを格納し、2 Dポインタはポインタ配列アドレスを格納します.
2.2 Dポインタの使い方
1.関数パラメータとして2 Dポインタ
#include
#include
void Func(int** pp){
int* p = malloc(sizeof(int));
*p = 100;
*pp = p;
printf("&p=%p\tp=%p\t*p=%d
",&p,p,*p);
}
int main(){
int* p = NULL;
Func(&p);
printf("&p=%p\tp=%p\t*p=%d
",&p,p,*p);
free(p);
p = NULL;
}
配列を取り出すこともできます
#include
#include
void PrintArray(int* arr,int n){
for(int i=0;i
#include
void PrintStrings(const char** strs,int n){
for(int i=0;i
2.2 Dポインタを関数として返す値
2 Dポインタは、通常、ポインタ配列の戻り値タイプとして使用されます.例:m*nの単位行列の作成
#include
#include
int** CreateIdentityMatrix(int r,int c){
int** pm = (int**)malloc(sizeof(int*)*r);
for(int i=0;i
3.練習
swapString()
を実装する.swapArray()
を実装し、2つの配列の値を交換する.*
**
***
****
****
******
**********
****
********
******