用C

时间:2018-04-14 03:42:49

标签: c arrays

它非常尴尬,但我真的想知道......所以我需要制作一个将十进制(基数为10)转换为二进制和十六进制的转换程序。我使用数组来存储值,一切都很好,但我将数组声明为int arr[1000];,因为我认为1000只是一个正确的数字,不是太大,不是很小......课堂上有人说“为什么会你声明一个1000的数组?整数是32位“。我太尴尬了,不知道这意味着什么,所以我没有说什么。但这是否意味着我可以将数组声明为int arr[32];而不是?我正在使用C btw

6 个答案:

答案 0 :(得分:0)

不,int类型通常具有32位大小,但是当您声明为

int arr[1000];

你保留1000个整数的空间,即32� 000,而与

int arr[32];

你最多可以存储32个整数。

你实际上问自己这样一个问题:如果一个苹果重32克,我想要我的包去 包含1000个苹果或32个苹果?

答案 1 :(得分:0)

不要尴尬。恐惧是你的敌人,最终你将被视为基于你没有希望产生重大影响的背景。无论如何,要回答你的问题,你的方法是不正确的。您应该声明数组的大小完全取决于使用的位置数。

具体来说,如果你在87个不同的位置(从0到86)访问数组,那么你需要87的大小。

答案 2 :(得分:0)

04,294,967,295是您可以存储在32位中的最大可能数字范围。如果您的数字超出此范围,则无法以32位存储您的数字。因为每个位将占用一个数组的索引位置如果数字落在该范围内32的数组大小会很好。例如,考虑数字9,它将作为a[]={1,0,0,1}存储在数组中。

为了知道已知的数字范围,您的公式为0 to (2^n -1),其中n是二进制的位数。表示数组大小为4或4位,您只能存储范围0 to 15中的数字。

在C中,如果使用无符号整数,则整数数据类型通常最多可以存储2,147,483,6474,294,967,295。由于最大值,可以在C中存储的整数数据类型在可以使用32位表示的最大可能数的范围内。可以肯定地说,数组大小为32是定义数组的最佳大小。使用int表示任何数字都不需要超过32位。

答案 3 :(得分:0)

我会用

int a = 42;
char bin[sizeof a * CHAR_BIT + 1];
char hex[sizeof a * CHAR_BIT / 4 + 1]

我认为这包括所有可能性。

答案 4 :(得分:0)

考虑到'int'类型也是不明确的。通常它取决于您正在使用的机器,至少它的范围是:-32767,+ 32767:

https://en.wikipedia.org/wiki/C_data_types

我可以建议使用stdint类型吗?

int32_t/uint32_t

答案 5 :(得分:0)

你做的是没关系的。如果这正是你想要做的。 C语言可以让你做任何你想做的事情。无论你什么时候想要。你在宣言上受到谴责的原因是因为“徘徊”。记忆。想到的是,DARE你如何占用可能从未使用过的空间......这是低效的。

确实如此。但谁愿意关心你是否只想运行一个有简单目的的程序?与计算机相比,1000 16或32位的内存块非常小,因为需要关注您占用多少RAM。所以 - 继续。

但接下来应该说的是如何避免这种情况。最后还有更多内容 - 但首先是关于C中内置数据类型的事情。

int可以是16位或32位,具体取决于您的声明方式。还有你的编译器设置......

LONG int是32。

考虑:

short int x = 10;    // declares an integer that is 16 bits 
signed int x = 10;   // 32 bit integer with negative and positive range
unsigned int x = 10  // same 32 bit integer - but only 0 to positive values

要专门编码32位整数,请将其声明为“长'

long int = 10;           // 32 bit
unsigned long int = 10;  // 32 bit 0 to positive values

典型的命名法是将16位值称为WORD,将32位值称为DWORD - (双字)。但是你为什么要输入:

long int x = 10;

而不是:

int x = 10;

??原因有几个。如果符合旧标准,一些编译器可能会将int作为16位WORD处理。但唯一真正的原因是维持一个强类型代码的约定。让它直接读取您打算做的事情。这也有助于提高可读性。当你看到它时,你会知道它的大小是肯定的,并且在编码时会被提醒。由于缺乏对代码实践的关注并且很好地命名事物,会发生许多代码错误。现在通过学习好习惯,以后可以节省数小时的头痛。创建您自己的编码风格。看看其他款式,只是为了了解行业的预期。但最终你会发现自己的方式。

关于数组问题--->所以,我希望你知道数组在程序运行时会占用内存。那么,wham - 该阵列的RAM仅用于您的程序。它被操作系统正在处理的任何其他资源,服务等锁定使用。

但是,如果你可以在你想要的时候使用你需要的内存,然后在完成后放手,它会不会很整洁?程序内部 - 运行时。因此,当您的程序首次启动时,阵列(可以这么说)将为零。当你需要一个'插槽时在数组中,您可以添加一个....使用它,然后让它去 - 或者添加另一个 - 或者再添加一个......等等。

这称为动态内存分配。它需要使用您可能尚未遇到的数据类型。查找" C"中的指针得到一个介绍。

如果您使用常规C进行编码,则有一些函数可以帮助执行动态内存分配:

 malloc and free      ~ in the alloc.h library routines

在C ++中,它们的实现方式不同。寻找:

 new and delete

用于处理动态数组的常用结构'被称为"链表。"看一下......

不要让别人对代码概念感到慌乱。下次只说你的程序旨在准确处理你的意图。这通常会阻止讨论。

  • Atomkey