【问题标题】:how to declare multidimensional array with typedef and pointer如何使用 typedef 和指针声明多维数组
【发布时间】:2024-04-24 14:05:02
【问题描述】:

现在的问题是关于 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* 如何创建二维 int 数组?我正在寻找类似的东西

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

显然上面的代码对我不起作用,所以它将以哪种方式工作,即我将获得 2d int 数组。

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

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

【问题讨论】:

    标签: c++ arrays pointers multidimensional-array typedef


    【解决方案1】:

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

    test 是一个 Course 类型的数组。

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

    测试[1][2]

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

    为什么不直接制作呢:

    int foo[][2]={{1,2},{3,4}}
    

    【讨论】:

      【解决方案2】:
      1. testCourse 的数组,即。 e. char 指针数组。课程类型将写为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}};

      【讨论】: