Cは2次元配列をパラメータとして渡す
5715 ワード
1.今日Cコードを书いて2次元の配列がどのようにパラメータとして伝达したことを発见して、资料を调べてからやっと私が思ったほど简単ではないことを発见して、以下は私が资料を调べて书いたコードと体得です.
2.C言語配列とポインタの違い
C言語ではメモリを4つの領域に分けており、一般的な変数や配列などはメモリのスタック領域に存在する.したがって、配列はC言語では同じタイプの通常の変数のセットにすぎず、この変数がポインタである可能性があるとしても、ポインタは任意の領域の任意のデータを指すことができ、この変数はスタック領域のデータのみを指すため、ポインタよりもずっと小さい.したがって、ポインタには配列名が含まれていると理解できますが、配列名というポインタはスタック領域のみを指し、移動範囲が限られており、配列は定義された場所にすでに独自のメモリがあり、ポインタがアドレスを指さないと独自のメモリがありません.これは第1部の私の疑問を解決して、システムは配列名に対して判断があって、アドレスを指すだけで1つのポインタとするわけではありません.もう1つの配列名がポインタに変わる場合は、次のコードを参照してください.
#include<stdio.h>
#include<stdlib.h>
// :
void function1(int array[][2])
{
printf("%d
",array[1][1]);
}
// :
void function2(int (*array)[2])
{
printf("%d
",array[1][1]);
}
// :
void function3(int* array)
{
printf("%d
",*(array+1*2+1));
}
void main()
{
//array , ( )
// , , ,
// ,
int array[3][2]={{1,2},{3,4},{6,9}};
function1(array);
function2(array);
// array , ,array &array[0][0],
// array
// , ,
// , , 。
// , !
function3(&array[0][0]);
}
2.C言語配列とポインタの違い
C言語ではメモリを4つの領域に分けており、一般的な変数や配列などはメモリのスタック領域に存在する.したがって、配列はC言語では同じタイプの通常の変数のセットにすぎず、この変数がポインタである可能性があるとしても、ポインタは任意の領域の任意のデータを指すことができ、この変数はスタック領域のデータのみを指すため、ポインタよりもずっと小さい.したがって、ポインタには配列名が含まれていると理解できますが、配列名というポインタはスタック領域のみを指し、移動範囲が限られており、配列は定義された場所にすでに独自のメモリがあり、ポインタがアドレスを指さないと独自のメモリがありません.これは第1部の私の疑問を解決して、システムは配列名に対して判断があって、アドレスを指すだけで1つのポインタとするわけではありません.もう1つの配列名がポインタに変わる場合は、次のコードを参照してください.
#include<stdio.h>
#include<stdlib.h>
void function1(int* array)
{
printf("%d
",sizeof(array));
// 4
}
void main()
{
int array[4]={1,2,3,5};
int length=sizeof(array);
printf("%d
",length);
// 16
function1(array);
}
// , ,