2013-10-27 27 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個整數的二維數組。