2013-10-27 26 views
-1

现在的问题是关于typedef和c样式的字符串。 这是代码。如何用typedef和指针声明多维数组

#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"); 
} 

这是我的理解: 道菜的是char类型的指针的别名。 -reference是一个char类型的指针。

我不知道或需要知道代码背后的理论是: 1-什么是测试[] ???我认为它的char类型指针数组换句话说test [1]包含char * =“btd310”。(我不知道它的推理。)

2-如何访问“d”中的“btd310”? 3-使用typedef int *我如何创建一个2维int数组?我一直在寻找类似

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

显然上面的代码,我没有工作,所以它的方式,将工作即我将得到二维int数组。

谢谢你们提前。顺便说一句,可能有更好的其他方法来做到这一点,但我必须学习这种方式。

上述代码中的两个宏如何工作?

回答

1

1-什么是测试[] ???我认为它的一个char类型的指针数组在 之后,换句话说test [1]包含char * =“btd310”。

测试是一个类型为Course的数组。

2-我如何访问“btd310”中的“d”?

测试[1] [2]

3-使用的typedef INT *如何创建一个二维int数组?

为什么不使它:

int foo[][2]={{1,2},{3,4}} 
0
  1. testCourse数组,我。即指针数组。课程类型将写为char *()[]。至于该阵列的内容,预处理器将简单地用"BTP300", "BTD310", "BTI320", "BTS330"代替C,因此测试的初始化读数为test[] = {"BTP300", "BTD310", "BTI320", "BTS330"}

  2. 你得到'D'test[1][2]。请注意,C区分大小写,因此'D''d'有很大不同。

  3. 在初始化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个整数的二维数组。