现在问题是关于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-什么是测试[] ???我认为它是一个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数组。
上面代码中的两个宏如何工作?
答案 0 :(得分:1)
1-什么是测试[] ???我认为它是一个char类型的指针数组 换句话说,test [1]包含char * =“btd310”。
test是一个类型为Course的数组。
2-如何访问“btd310”中的“d”?
测试[1] [2]
3-使用typedef int *如何创建2维int数组?
为什么不做它:
int foo[][2]={{1,2},{3,4}}
答案 1 :(得分:0)
test
是Course
的数组,i。即一组char
指针。课程类型将写为char *()[]
。至于该数组的内容,预处理器将简单地用"BTP300", "BTD310", "BTI320", "BTS330"
代替C
,因此测试的初始化读取test[] = {"BTP300", "BTD310", "BTI320", "BTS330"}
。
您获得'D'
test[1][2]
。请注意,C在所有地方都区分大小写,因此'D'
与'd'
非常不同。
在char*
和char ()[]
的初始化中使用字符串有点特殊,所以最好不要考虑这一点。要声明int
的二维数组,只需使用int foo[2][2] = {{1, 2}, {3, 4}};
如果必须使用typedef,则可以使用typedef int arr[2];
为2个整数的一维数组定义数组类型,然后你可以使用arr foo[2] = {{1, 2}, {3, 4}};
制作一个包含2个整数的一维数组的一维数组。