ここでの質問は、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 つのマクロはどのように機能しますか?