2

文字配列のアドレスを関数に渡そうとして少し問題がありました。これは、私がやろうとしていることの簡単な例です:

char a[20] = {"hello"};
printit( &a );

彼のprintit関数の宣言を教えてください(そしておそらくその理由)、私は次のようなものを期待していました:

void printit( char ** value );
or void printit( char * value[] );

動作しますが、そうではありません。

*エラーメッセージ:

void printit( char ** value ); => cannot convert parameter 1 from 'char (*)[20]' to 'char **'
void printit( char * value[] ); => cannot convert parameter 1 from 'char (*)[20]' to 'char *[]'

前もって感謝します。

よろしく、最大。

4

2 に答える 2

7

パラメータ&aは 20 文字の配列へのポインタであるため、次のようになります。

void printit(char (*value)[20]);  // value is a pointer to an array of 20 chars

.

ただし、より一般的には (特に文字列の場合)、呼び出しを次のように変更します。

printit(a);   // a will be passed as pointer to first elelemt, i.e. 'a' can be used as pointer to char

printitを次のように定義します

void printit(char *value)
{
     printf("The string is: %s", value);
}
于 2013-06-11T09:27:28.783 に答える
1

※訂正しました・間違えました

char* の配列を宣言していません。char の配列を宣言しています。変数宣言にアスタリスクを追加して & を削除すると、機能するはずです。

void printit(char** arr){
  string tmp(arr[0]);
  cout<<tmp<<endl;
}


char* a[20] = {"hello"};
printit( a );
于 2013-06-11T09:24:41.013 に答える