有没有办法在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 spacepointer 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函数中

c语言中字符串能否转为代码执行?或者有啥替代办法?

有没有办法在 MongoDB 聚合期间将字符串(格式:“1,5,20,22”)转换为整数数组( [1,5, 20, 22] )?

c#如何将2D数组拆分为较小的2D数组(块)列表?

c语言中如何将字符串转化成整数型并输出?

字符串和字符数组