-1

ここでの質問は、typedef と c スタイルの文字列についてです。これがコードです。

 #include <stdio.h>
 #define C "BTP300", "BTD310", "BTI320", "BTS330"
 typedef char* Course;// Line 1
 #define CMP(a,b,c,d) ((a[(c)])d(b[(c)]))

 int main(void) {
     Course reference, test[] = {C}; //Line 2
     sort(test,4,2);
     reference=test[0];
     difference(test, reference, 4);
     return 0;
 }


    void sort(Course a[], int n, int k) {
         int i, j;
         Course temp;
         for (i = n - 1; i > 0; i--) {
             for (j = 0; j < i; j++) {
                 if (CMP(a[j],a[j+1],k,>)) {
                     temp = a[j];
                     a[j] = a[j+1];
                     a[j+1] = temp;
                 }
             }
         }
     }

 void difference(Course a[], Course reference, int n) {
     int i;
     for (i = 0; i < n; i++)
         printf("%d ", ABS(a[i] - reference));
     printf("\n");
 }

これは私が理解したものです: -Course は char 型のポインターのエイリアスです。-reference は char 型のポインタです。

私が知らない、またはコードの背後にある理論を知る必要があるのは次のとおりです。1- test[] とは??? char 型のポインターの配列、つまり test[1] には char*="btd310" が含まれていると思います (その理由はわかりません)。

2-「btd310」の「d」にアクセスするにはどうすればよいですか? 3- typedef int* を使用して 2 次元の int 配列を作成するにはどうすればよいですか? 私は何かを探していました

typedef int* arr;
void main(){
arr foo[]={{1,2},{3,4}}
}

明らかに上記のコードは私にとってはうまくいかなかったので、どのように機能するか、つまり 2d int 配列を取得します。

よろしくお願いします。ところで、それを行うにはもっと良い方法があるかもしれませんが、私はこの方法を学ばなければなりません.

上記のコードの 2 つのマクロはどのように機能しますか?

4

2 に答える 2

1

1- test[] とは ??? char 型のポインターの配列、つまり test[1] には char*="btd310" が含まれていると思います。

test は Course 型の配列です。

2-「btd310」の「d」にアクセスするにはどうすればよいですか?

テスト[1][2]

3- typedef int* を使用して 2 次元の int 配列を作成するにはどうすればよいですか?

なぜそれを作るだけではないのですか:

int foo[][2]={{1,2},{3,4}}
于 2013-10-27T08:32:33.623 に答える
0
  1. testの配列Course、つまりcharポインタの配列です。コースのタイプは のように記述されchar *()[]ます。その配列の内容に関しては、プリプロセッサは単純に を代入"BTP300", "BTD310", "BTI320", "BTS330"するためC、テストの初期化は を読み取りますtest[] = {"BTP300", "BTD310", "BTI320", "BTS330"}

  2. で取得'D'test[1][2]ます。C はどこでも大文字と小文字が区別されるため、'D'とは大きく異なることに注意してください'd'

  3. char*andの初期化での文字列の使用はchar ()[]少し特殊なので、考えないほうがよいでしょう。の 2 次元配列を宣言するにはint、単純に をint foo[2][2] = {{1, 2}, {3, 4}};使用します。typedef を使用する必要がある場合は、 を使用typedef int arr[2];して 2 つの整数の 1 次元配列の配列型を定義し、2 つの 1 次元配列の 1 次元配列を作成できます。の 2 つの整数arr foo[2] = {{1, 2}, {3, 4}};

于 2013-10-27T08:35:12.687 に答える