これら2つの宣言の違いは何ですか:
char (*ptr)[N];
対。
char ptr[][N];
ありがとう。
(1) 宣言
char (*ptr)[N];
ptr
次のコードはpointer to char array of size N
、それを使用する方法についてあなたを助けるでしょう:
#include<stdio.h>
#define N 10
int main(){
char array[N] = "yourname?";
char (*ptr)[N] = &array;
int i=0;
while((*ptr)[i])
printf("%c",(*ptr)[i++]);
}
出力:
yourname?
参照:コードパッド
(2.A)
無効char ptr[][N];
な式はエラーになりますが、次のようになりますarray size missing in 'ptr'
。
ただしchar ptr[][2] = {2,3,4,5};
、これは2D文字配列である有効な宣言です。以下の例:
int ptr[][3] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}};
3行5列のint配列を作成します。Codepade-例
(2.B) 関数パラメーターの特殊なケース!
関数パラメータchar ptr[][N];
は有効な式であるため。つまり、を指すことptr
ができます2D char array of N columns
。
例:出力のコメントを読む
#include <stdio.h>
int fun(char arr[][5]){
printf("sizeof arr is %d bytes\n", (int)sizeof arr);
}
int main(void) {
char arr[][6] = {{'a','b'}, {'c','d'}, {'d','e'}};
printf("sizeof arr is %d bytes\n", (int)sizeof arr);
printf("number of elements: %d\n", (int)(sizeof arr/sizeof arr[0]));
fun(arr);
return 0;
}
出力:
sizeof arr is 6 bytes // 6 byte an Array 2*3 = 6
number of elements: 3 // 3 rows
sizeof arr is 4 bytes // pointer of char 4 bytes
実行中のこの例を表示するには:codepad
1つ目はcharの配列Nへのポインタとしてptrを宣言します
2つ目はcharの配列Nの配列としてptrを宣言します
Plz参照リンク
1つ目はN長配列へのポインタを宣言し、もう1つは2次元配列を宣言します。注:これらは同様の機能を実現するために使用できますが、同じ意味ではありません。
1.ptrはサイズNの文字配列へのポインタです。2。ptrは2次元配列のように見えますが、行数は指定されていません。2D配列では、コンパイラがバイト数を決定するため、行数と列数の両方が必須です。 (行数*列数*データ型のサイズ)によって配列に割り当てられます。この宣言は、次のように正常に機能する可能性があります。
char[][2]={
{'a','b'}
};
ここでコンパイラは1つの行があることを確認して理解します。または、2次元配列が関数の引数として渡される場合、列の数(2次元)は強制によって提供される必要があります。行の数を渡すことは関数では必須ではありません。意味。