Tag: 数组

如何在C中使用灵活数组来保存多个值?

我有以下代码: typedef struct { int name; int info[1]; } Data; 那我有五个变量: int a, b, c, d, e; 我怎样才能将它作为一个灵活的数组来保存五个变量的所有值?

char * array和char array

如果我写这个 char *array = “One good thing about music”; 我实际创建一个数组? 我的意思是这样的一样吗? char array[] = {“One”, “good”, “thing”, “about”, “music”};

如何在C中正确地将hex字符串转换为字节数组?

我需要将包含hex值的字符串转换为字节数组。 虽然这已经在这里作为第一个答案回答了,但我收到以下错误: warning: ISO C90 does not support the ‘hh’ gnu_scanf length modifier [-Wformat] 因为我不喜欢警告,而且遗漏hh只会产生另一个警告 warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 3 has type ‘unsigned char *’ [-Wformat] 我的问题是:如何做到这一点? 为了完成,我再次在这里发布示例代码: #include int main(int argc, char **argv) { const char hexstring[] = “deadbeef10203040b00b1e50”, *pos = hexstring; unsigned char val[12]; size_t […]

C中Sizeof的行为

我已经了解到,当我们将数组名称传递给sizeof时,数组的名称不会衰减到指向基址的指针。 下面的代码通过给出答案10来validation这一事实。 #include int main(){ int arr[10]; printf(“Size of array is %d” , sizeof(arr)/sizeof(int)); return 0; } 然而,当我运行下面的代码时,答案是1.无论维度是否是用原型编写,答案都是1.为什么会这样? #include void dimension(int arr[]){ printf(“Sizof array is %d” , sizeof(arr)/sizeof(int)); } int main(){ int arr[10]; dimension(arr); return 0; }

通过结构别名arrays

我正在阅读ISO / IEC 9899:TC2中第6.5段的第7段。 它通过以下方式宽恕对对象的左值访问: 一种聚合或联合类型,包括其成员中的上述类型之一(包括递归地,子聚合或包含联合的成员), 请参阅文档,了解“前面提到的”类型,但它们肯定包含对象的有效类型。 它的部分标注为: 此列表的目的是指定对象可能或可能不具有别名的情况。 我读到这个说(例如)以下是明确定义的: #include #include typedef struct { unsigned int x; } s; int main(void){ unsigned int array[3] = {73,74,75}; s* sp=(s*)&array; sp->x=80; printf(“%d\n”,array[0]); return EXIT_SUCCESS; } 该程序应输出80。 我不是在提倡这是一个好的(或非常有用的)想法,并承认我在某种程度上解释它是因为我无法想到其他意味着什么也不能相信它是一个毫无意义的句子! 也就是说,我看不出有理由禁止它。 我们所知道的是该位置的对齐和内存内容与sp->x兼容,为什么不呢? 它似乎甚至可以说我是否加了(比方说) double y; 在结构的末尾,我仍然可以通过sp->x访问array[0] 。 然而,即使数组大于sizeof(s)任何访问sp->y尝试都是’所有下注’未定义的行为。 可能我礼貌地要求人们说出那句话宽恕而不是进入一个扁平的旋转喊“严格混淆UB严格别名UB”似乎经常是这些事情的方式。

用函数计算C中的数组长度

我想制作一个计算传递数组大小的FUNCTION。 我将传递一个数组作为输入,它应该返回它的长度。 我想要一个function int ArraySize(int * Array /* Or int Array[] */) { /* Calculate Length of Array and Return it */ } void main() { int MyArray[8]={1,2,3,0,5}; int length; length=ArraySize(MyArray); printf(“Size of Array: %d”,length); } 长度应该是5,因为它包含5个元素,虽然它的大小是8(即使8会做,但5会很棒) 我试过这个: int ArraySize(int * Array) { return (sizeof(Array)/sizeof(int)); } 这将无效,因为“ sizeof(Array) ”将重新调整Int指针的大小。 只有当你处于相同的function时,这个“ sizeof ”的东西才有效。 实际上我从C#开始很多天后回到C所以我不记得了(并且缺少Array.Length() ) 问候!

使用带有结构数组的qsort需要帮助

现在,我已经看到了各种各样的例子,但我不明白他们的意思。 这是我的结构 typedef struct profile{ char gender[1]; double soc; . . . } PROFILE; soc是社会安全号码,我将要排序。 我知道你需要一个比较function,但我不知道如何提出我需要的确切内容。

使用单个指针访问2D数组

有很多像这样的代码: #include int main(void) { int a[2][2] = {{0, 1}, {2, -1}}; int *p = &a[0][0]; while (*p != -1) { printf(“%d\n”, *p); p++; } return 0; } 但基于这个答案 ,行为是不确定的。 N1570。 6.5.6 p8: 当一个具有整数类型的表达式被添加到指针或从指针中减去时,结果具有指针操作数的类型。 如果指针操作数指向数组对象的元素,并且数组足够大,则结果指向与原始元素偏移的元素,使得结果元素和原始数组元素的下标的差异等于整数表达式。 换句话说,如果表达式P指向数组对象的第i个元素,则表达式(P)+ N(等效地,N +(P))和(P)-N(其中N具有值n)指向分别为数组对象的第i + n和第i-n个元素,只要它们存在。 此外,如果表达式P指向数组对象的最后一个元素,则表达式(P)+1指向一个超过数组对象的最后一个元素,如果表达式Q指向一个超过数组对象的最后一个元素,表达式(Q)-1指向数组对象的最后一个元素。 如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出; 否则,行为未定义。 如果结果指向数组对象的最后一个元素之后,则不应将其用作已计算的一元*运算符的操作数。 有人可以详细解释一下吗?

如何在C中将字节数组转换为double?

我有一个包含8个字节的字节数组,并希望转换并将它们用作双精度二进制浮点数。 有人可以告诉我如何转换它?

数组如何在c / c ++中内部工作

我想知道数组如何在c中工作。 我最终得出一个假设,我想知道我是否正确。 我们知道数组是一系列相邻的内存盒(盒子),其中每个盒子的大小都是它所存储的类型(即如果INT的一个盒子的大小= sizeof(int),则一个3个INT的数组占用内存相邻的位置3 sizeof(int)) 现在我们也知道我们可以为某种类型的数组动态分配内存(C中的malloc,C ++中的new)。 让我想知道的是,当使用括号[0]调用数组时,一个数组的原点是数组的第一个框的地址和第一个值(后面的框中的值)是数组[0] = = *(数组+ 0)== *数组(数组是否被声明为“type * array”或“type array []”或“type array [size]”)和“数组”这样称为无论是定义为指针还是数组(“type * array”或“type array []”或“type array [size]”)是第一个框的地址。 我最后想了想,我想对此进行确认:数组甚至用方括号([]声明)实际上在内存中是一系列n个指针,每个指针包含(作为一个值而不是地址)的地址一个存储盒Bi,包含实际值+那些存储盒(B0,…,Bn,每个包含实际值)。 这样,当一个人声明“int array [5]”时,该程序实际上分配了5个相邻的int指针盒P0,P1,…,P4和5个整个计算机存储器B0,B1,…的整个大小的存储器位置。 ..,B4,其中Pi的值是Bi的地址 我是对还是错!! 谢谢!