Tag: 数组

在C中将字节转换为Int / uint

我有一个unsigned char数组[248]; 填充字节。 像2F AF FF 00 EB AB CD EF ……这个arrays是我的字节流,我将来自UART(RS232)的数据存储为缓冲区。 现在我想将字节转换回我的uint16和int32。 在C#中,我使用BitConverter类来执行此操作。 例如: byte[] Array = { 0A, AB, CD, 25 }; int myint1 = BitConverter.ToInt32(bytes, 0); int myint2 = BitConverter.ToInt32(bytes, 4); int myint3 = BitConverter.ToInt32(bytes, 8); int myint4 = BitConverter.ToInt32(bytes, 12); //… enter code here Console.WriteLine(“int: {0}”, myint1); //output Data… C中是否有类似的function? (没有.net,我使用KEIL编译器,因为代码在微控制器上运行) […]

结构中的Unsized数组声明

为什么C允许这样: typedef struct { int arr []; } s; 数组arr没有指定大小?

为什么我不能像C中的指针一样处理数组?

我在SO上看到了很多这个问题。 也许没有那么多的话……但是一次又一次地存在关于数组如何与指针不同的混淆。 所以我想我会花一点时间来问这个问题。 出于本Q&A的目的,我们将假设一个32位系统,并且已声明以下内容: char * ptr = “hello”; char arr[10] = “hello”; int iarr[10] = {0}; 这是一个问题列表,可以推测我在SO上看到的混乱。 当我看到新的问题时,我会添加到我的问答清单中(其他人也可以随意使用,如果您发现任何错误,请纠正我!) 指针和数组不是基本相同的东西吗? 跟进: *(ptr)和*(arr) ,或ptr[0]和arr[0]给出相同的东西,为什么? 为什么arr和&arr的价值相同? 跟进:为什么我得到一个不同的值打印arr+1 vs &arr+1 ?

使用C调整数组大小

我需要在我正在制作的游戏中拥有一系列结构 – 但我不想将数组限制为固定大小。 我被告知有一种方法可以在需要时使用realloc使数组更大,但找不到任何有用的例子。 有人可以告诉我该怎么做吗?

为什么一个大的本地数组会崩溃我的程序,但是全局程序不会崩溃?

具有大型全局数组的程序: int ar[2000000]; int main() { } 使用大型本地数组的程序: int main() { int ar[2000000]; } 当我在main函数中声明一个大尺寸的数组时,程序会崩溃并出现“SIGSEGV(Segmentation fault)”。 但是,当我将其声明为全局时,一切正常。 这是为什么?

为什么我被允许在C中使用const限定变量作为数组大小?

当我运行以下代码时,它适用于C: #include int main(void) { const int x=5; char arr[x]; printf(“%d”,sizeof(arr)); } 但是我不仅在之前读过const限定变量不是real常量(这就是为什么它们不能在switch-case ),但IBM的以下链接证实了( IBMLINK )并说: const int k = 10; int ary[k]; /* allowed in C++, not legal in C */ 为什么我允许在C中使用const限定变量作为数组大小而没有任何错误?

查找函数内的数组长度

在下面的程序中,数组ar的长度在main中是正确的,但在temp它显示指向ar的指针的长度,在我的计算机上它是2(以sizeof(int)为单位)。 #include void temp(int ar[]) // this could also be declared as `int *ar` { printf(“%d\n”, (int) sizeof(ar)/sizeof(int)); } int main(void) { int ar[]={1,2,3}; printf(“%d\n”, (int) sizeof(ar)/sizeof(int)); temp(ar); return 0; } 我想知道如何定义函数,以便在函数中正确读取数组的长度。

在C中打印数组时奇怪的行为?

我正在尝试打印一个数组但是我没有得到所需的输出,在循环完成打印预定义数组后出现了奇怪的数字。 代码是: #include int main(){ int intArray[11] = {1,2,8,12,-13,-15,20,99,32767,10,31}; int i=0; for(i=0;i<sizeof(intArray);i++){ printf("%d\n",intArray[i]); } } 输出: 1 2 8 12 -13 -15 20 99 32767 10 31 11 1629976468 2674040 2665720 1627423265 1 2665616 -2147417856 1629976534 1629976468 2674040 0 1627423172 1629976532 0 1629110043 0 0 0 0 0 0 0 0 0 0 0 1629976538 […]

访问超出C和C ++限制的数组

int data[8]; data[9] = 1; c ++标准对此有何评论? 这是未定义的行为吗? 至少C编译器(gcc -std = c99 -pedantic -W -Wall)对此没有任何说明。 谢谢。

C数组可以在元素之间包含填充吗?

我听说有传言说,在C语言中,包含在结构中的数组可能在数组元素之间添加了填充。 显然,填充量不能在任何元素对之间变化,或者使用简单的指针算法计算数组中的下一个元素是不可能的。 这个谣言还指出,结构中没有包含的数组保证不包含填充。 我知道至少那部分是真的。 因此,在代码中,谣言是: { // Given this: struct { int values[20]; } foo; int values[20]; // This may be true: sizeof(values) != sizeof(foo.values); } 我很确定sizeof(values)总是等于sizeof(foo.values) 。 但是,我无法在C标准(特别是C99)中找到明确证实或否认这一点的任何内容。 有谁知道这个谣言是否在任何C标准中得到解决? 编辑 :我知道数组foo.values的结尾和struct foo的结尾之间可能存在填充,并且标准声明foo的开头和foo.values的开头之间没有填充。 但是,是否有人引用或引用标准,其中foo.values的元素之间没有填充?