2

これら2つの宣言の違いは何ですか:

char (*ptr)[N];

対。

char ptr[][N];

ありがとう。

4

4 に答える 4

4

(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

于 2013-03-01T12:00:08.827 に答える
2

1つ目はcharの配列Nへのポインタとしてptrを宣言します
2つ目はcharの配列Nの配列としてptrを宣言します

Plz参照リンク

于 2013-03-01T12:06:30.520 に答える
1

1つ目はN長配列へのポインタを宣言し、もう1つは2次元配列を宣言します。注:これらは同様の機能を実現するために使用できますが、同じ意味ではありません。

于 2013-03-01T12:04:49.343 に答える
0

1.ptrはサイズNの文字配列へのポインタです。2。ptrは2次元配列のように見えますが、行数は指定されていません。2D配列では、コンパイラがバイト数を決定するため、行数と列数の両方が必須です。 (行数*列数*データ型のサイズ)によって配列に割り当てられます。この宣言は、次のように正常に機能する可能性があります。

char[][2]={
           {'a','b'}
          };

ここでコンパイラは1つの行があることを確認して理解します。または、2次元配列が関数の引数として渡される場合、列の数(2次元)は強制によって提供される必要があります。行の数を渡すことは関数では必須ではありません。意味。

于 2013-03-01T12:22:33.073 に答える