如何使用 typedef 和指针声明多维数组
how to declare multidimensional array with typedef and pointer
现在的问题是关于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 是字符类型指针的别名。-reference 是字符类型的指针。
我不知道或不需要知道代码背后的理论是: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 数组。
提前谢谢大家。顺便说一句,可能还有其他更好的方法可以做到这一点,但我必须以这种方式学习。
上面代码中的两个宏是如何工作的?
1- 什么是测试[] ???我认为它是字符类型的指针数组 其他单词 test[1] 包含 char*="btd310" 。
测试是课程类型的数组。
2- 如何访问"BTD310"中的"D"?
测试[1][2]
3- 使用 Typedef int* 如何创建二维 int 数组?
为什么不直接制作它:
int foo[][2]={{1,2},{3,4}}
-
test
是一个Course
数组,即一个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 个整数的两个一维数组的一维数组。
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- 在 c++ 中直接访问的内联数组声明
- 由于 2D 数组声明,C++ 14 中的运行时错误
- 如何将char数组声明为函数参数?或告诉我此代码中还有其他问题?
- 来自函数参数的 C++ 静态数组声明
- C++ 中的动态数组声明
- C++数组声明
- 数组声明中的错误:表达式必须具有常量值
- 程序随数组声明崩溃
- 运行时和编译时的数组声明
- C++数组声明和初始化
- 带有常量表达式的数组声明
- C ,数组声明,模板,链接器错误
- 如何用'n'维数组声明 std::vector?
- 数组声明上的编译器错误
- 这是什么数组声明
- 头文件类中的数组声明
- 节点数组声明
- 在静态数组声明中使用了两次C++常量