有没有办法在C中有一个2D数组,它有整数和字符?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法在C中有一个2D数组,它有整数和字符?相关的知识,希望对你有一定的参考价值。
我正在编写一个代码,要求提供2D数组,在该数组中有玩具名称及其成本。所以我想知道是否有可能的方式,因为我尝试了它并没有真正起作用。
每个C数组都只有一个元素类型,但该类型可以是结构或联合类型,也可以是指向其中一种对象的指针类型。例如,
union int_or_string {
int as_int;
char *as_string;
};
union int_or_string[5][5];
但我想知道你真正想要的是一维结构数组:
struct toy {
char *name;
int cost;
};
struct toy array[42];
我不确定你的代码是否要求2d数组。我想象一组结构更合乎逻辑:
struct toy {
char *name;
double price;
}
struct toy toys[NUMBER];
数组是包含相同对象类型的数据的数据结构。所以问题的答案是否定的。 您可以为此目的使用结构。
struct Data{
char *str;
int n;
};
struct Data data[SIZE] // Array of struct of SIZE struct Data
Towards the solution...
这就是为什么有一种叫做结构的东西。你把name
和他们的price
-s放在一个结构中,然后所有这些结构变量放在一个数组中。 (这里进行了一个简单的演示,它没有使用2d数组,而是使用了1d结构数组)。
Example (Illustration only)
struct toy{
char name[100];
double price;
}
struct toy toyArr[50];
然后你会做类似的事情(获得输入)
for(size_t i = 0; i < 50; i++){
if( scanf("%lf",&toyArr[i].price) != 1){
fprintf(stderr,"Error in input");
exit(1);
}
if( scanf("%99s",toyArr[i].name) != 1){
fprintf(stderr,"Error in input");
exit(1);
}
...
}
Arrays are too strict...
另外,你对阵列类型§6.2.5感到困惑
数组类型描述了具有特定成员对象类型的连续分配的非空对象集,称为元素类型。只要指定了数组类型,元素类型就应该是完整的。数组类型的特征在于它们的元素类型和数组中的元素数。数组类型据说是从其元素类型派生的,如果它的元素类型是
T
,则数组类型有时称为''array of T ''
。从元素类型构造数组类型称为''array type derivation''
。
1强调我的
Way of using array (on the light of your question).
这应该是一个特定的成员对象类型,而不是类型的混合或任何像你在想的东西。
我们可以通过使用structure
等结构来超越这种严格的类型相似性,这些结构为我们提供了您想要的。然后该数组也具有类似的struct
类型,但由于struct
可以在其中包含不同的类型,它为我们提供了您所需要的。
我对你的问题(标题)的理解是,你想要一系列名称或数字的东西
你在概念上想要一个总和类型,也称为tagged union。你应该考虑abstract data types(所以首先记录你的ADT的所有操作)。 SICP是一本免费提供的书,解释了这个概念(但它没有使用C),并且是对一般编程的一个很好的介绍。
C本身没有sum类型,但为您提供raw union
types,可用于构建sum类型。见this example。
也许你只是想要一系列具有名称和数字的东西......然后:
如果你只想要一个product type(即同时具有名称和成本的数组),请使用a struct
但是C中的arrays是由具有相同类型的组件组成的。它们总是单维的,但您可以使用数组阵列伪造2D数组。特别是,C中不存在矩阵(具有不同维度),但您可以很容易地模仿它们(例如,通过为它们构建own抽象数据类型)。
Pointers在C中也非常重要。我不敢在这里解释原因。你需要阅读一些好的C编程书(解释C dynamic heap allocation以及为什么以及何时数组衰减成指针)。 virtual address space和pointer aliasing的概念几乎是重要的。
也许你不需要大量空的条目。在某些情况下,你应该考虑更复杂的data structures。阅读一些Introduction to Algorithms。也许你需要一些hash table。 C本身不提供这些,但为您提供了足够的基本构建块(在您的library中)。
我的感觉是你并不真的需要2D阵列,但我不知道你的整体问题,我可能错了。
还要考虑研究一些现有的free software程序的源代码(例如在github或其他地方)。他们可以激励你(特别是因为coding conventions在实践中非常重要)。
顺便说一句,C11规范可以下载为n1570(但它不是C编程的介绍)。
不要忘记编译所有警告和调试信息,GCC is gcc -Wall -Wextra -g
。改进您的代码以获得警告。然后use the debugger gdb
。
以上是关于有没有办法在C中有一个2D数组,它有整数和字符?的主要内容,如果未能解决你的问题,请参考以下文章
C将“字符串”的2D数组收集到数组中,然后将每个2D传递到C98函数中
有没有办法在 MongoDB 聚合期间将字符串(格式:“1,5,20,22”)转换为整数数组( [1,5, 20, 22] )?