[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
2022-01-18 16:59:42
質問
C言語初心者のため、解答がよくわからず、既出の質問で申し訳ありません。 以下は私の関数です。
int rotateArr(int *arr) {
int D[4][4];
int i = 0, n =0;
for(i; i < M; i ++ ){
for(n; n < N; n++){
D[i][n] = arr[n][M - i + 1];
}
}
return D;
}
エラーを投げる
main.c|23|error: 添え字の値は、配列でもなければ ポインタまたはベクトル|。
ライン上
D[i][n] = arr[n][M - i + 1]となります。
どうしたんですか?配列要素の値を別の配列要素にセットしているだけなのですが。
渡されたarrは、以下のように宣言されています。
int S[4][4] = { { 1, 4, 10, 3 }, { 0, 6, 3, 8 }, { 7, 10 ,8, 5 }, { 9, 5, 11, 2} };
解決方法は?
C言語では、添え字演算子を使用することができます
[]
配列とポインタに適用されます。この演算子をポインタに使用した場合、結果の型はポインタが指す先の型になります。たとえば
[]
に
int*
の場合、結果は
int
.
まさにその通りです:あなたが渡しているのは
int*
これは整数のベクトルに相当します。これに一度下付き文字を使うと
int
そのため、2つ目の添え字を適用することはできません。
あなたのコードからは
arr
は2次元配列であるべきです。もしこれがギザギザ配列(つまりポインタの配列)として実装されているならば、パラメータの型は次のようになります。
int **
.
さらに、ローカルの配列を返そうとしているようです。これを合法的に行うには、配列を動的に割り当てて、そのポインタを返す必要があります。しかし、よりよい方法としては、特別な
struct
を 4x4 の行列に使用し、それを使って以下のように固定サイズの配列をラップしています。
// This type wraps your 4x4 matrix
typedef struct {
int arr[4][4];
} FourByFour;
// Now rotate(m) can use FourByFour as a type
FourByFour rotate(FourByFour m) {
FourByFour D;
for(int i = 0; i < 4; i ++ ){
for(int n = 0; n < 4; n++){
D.arr[i][n] = m.arr[n][3 - i];
}
}
return D;
}
// Here is a demo of your rotate(m) in action:
int main(void) {
FourByFour S = {.arr = {
{ 1, 4, 10, 3 },
{ 0, 6, 3, 8 },
{ 7, 10 ,8, 5 },
{ 9, 5, 11, 2}
} };
FourByFour r = rotate(S);
for(int i=0; i < 4; i ++ ){
for(int n=0; n < 4; n++){
printf("%d ", r.arr[i][n]);
}
printf("\n");
}
return 0;
}
これは は以下を表示します。 :
3 8 5 2
10 3 8 11
4 6 10 5
1 0 7 9
関連
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み】エラー。非スカラー型への変換を要求された
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】argv[]をint型として取得するには?
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み] テスト
-
[解決済み] '{'トークンの前に期待される式
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラー。"変数サイズのオブジェクトが初期化されていない可能性がある"
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み】シンプルなC言語のscanfが機能しない?重複