Tag: 数组

如果结构定义了uint16_t字和uint8_t字节,则数组的大小加倍

我有一个数组,每个数组的元素可以是uint16_t或一对uint8_t。 它的元素被定义为uint16_t和2 uint8_t的子数组的并集。 不幸的是,编译器(MicroChip XC16)分配的内存量应该是arrays的两倍。 typedef union { uint16_t u16; // As uint16_t uint8_t u8[2]; // As uint8_t } my_array_t; my_array_t my_array[1]; // 1 word array, for testing my_array[0].u8[0] = 1; my_array[0].u8[1] = 2; uint8_t byte_0 = my_array[0].u8[0]; // Gets 0x01 uint8_t byte_1 = my_array[0].u8[1]; // Gets 0x02 uint16_t byte_0 = my_array[0].u16; // Gets 0x0201 […]

排序大小为n的数组

如果大小为n的数组只有3个值0,1和2(重复任意次数),那么对它们进行排序的最佳方法是什么。 最好表示复杂性。 考虑空间和时间复杂性

在c中对2维数组进行排序

我正在尝试对二维数组进行排序。原始数组是 5 0 3 4 1 2 3 1 1 4 2 2 3 3 1 排序时,应该是这样的 3 1 1 3 3 1 4 2 2 4 1 2 5 0 3 这是我用来尝试实现冒泡排序的代码,我代表行数。 int x,y,z,j,temp1,temp2,temp3; for(x=0;x<i;x++) { for (j=0;ja[j+1][0]) { temp1=a[j][0]; temp2=a[j][1]; temp3=a[j][2]; a[j][0]=a[j+1][0]; a[j][1]=a[j+1][1]; a[j][2]=a[j+1][2]; a[j+1][0]=temp1; a[j+1][1]=temp2; a[j+1][2]=temp3; } } } 它仍然没有排序,任何帮助将不胜感激。

数组中的元素太多了!

对不起,如果这是一个菜鸟问题:(。 一块C代码。 int array[5]; int cnt; for(cnt = 0; cnt <= 10; cnt+=1) { array[cnt] = cnt; } 应该给出错误吧? 没有! 工作良好! 但那是为什么呢? 似乎 – 在第一行 – 定义了超过双倍大小(11)的数组。 您甚至可以稍后访问数组[5到10]。 这让我很困惑。 定义数组[4或更少]时它停止工作… 提前致谢。

使用宏“优秀实践”定义数组的长度?

我正在编写一本名为“ C编程:现代方法”的书 ,在讨论数组的第一部分中,作者指出: 使用宏来定义数组的长度是很好的做法 然后使用简短的例子: #define N 10 … int a[N]; 我知道它与能够回到程序的源代码并更改值有关,并使其成为宏可能使程序员更容易,但我不确定。 为什么这是一个很好的做法,还是客观的?

声明具有0个元素的数组仍然可以存储值

我知道使用负面索引只是纯粹的运气。 但出于好奇,我尝试了这个。 我知道你可以声明array [0]; 就像malloc(0); 是合法的。 但是为什么我可以在array [0]中存储一个值? #include #include int main(void) { int i; int array[0]; array[0] = 5; printf(“%d\n”,array[0]); getch(); }

为什么使用数组索引循环数组比指针访问慢?

我正在阅读Kochan的书“C编程”。 在p。中的Pointer和Arrays部分。 264他说: 通常,索引数组的过程比访问指针内容的过程花费更多的时间来执行。 实际上,这是使用指针访问数组元素的主要原因之一 – 生成的代码通常更有效。 当然,如果对数组的访问通常不是顺序的,那么就这个问题而言,指针什么都不做,因为表达式*(指针+ j)和表达式数组[j]的执行时间一样长。 有人可以解释什么比什么更快? 具体来说,如果array [j]的速度= *(指针+ j)的速度那么索引数组 的过程是什么,以及访问指针内容的过程是什么? 此外,有关SO的问题和答案提到在编译期间将数组[j]转换为*(数组+ j),因此不应有任何区别。 总结:请给我一个Kochan所说的非常简单的例子。 2个代码并指向更快的代码,不必解释为什么它是真的。

char数组前面的&符号会影响scanf吗? 它合法吗?

当我们通常输入字符串时,我们这样做: #include int main() { char str[256]; scanf(“%s”,str); //Other Operation } 但是,今天,在编程课上,我的一个朋友写了这样的scanf行: scanf(“%s”,&str); 它通过编译,并工作。 问题是,我想知道这是否在C中是“合法的”,还是只是一个未定义的行为?

别名结构和数组符合方式

在ISO C之前的日子里,下面的代码会让人惊讶: struct Point { double x; double y; double z; }; double dist(struct Point *p1, struct Point *p2) { double d2 = 0; double *coord1 = &p1.x; double *coord2 = &p2.x; int i; for (i=0; i<3; i++) { double d = coord2[i] – coord1[i]; // THE problem d2 += d * d; return sqrt(d2); […]

从C中删除数组中大量元素的最快方法

我有动态数组,包含数千个元素甚至更多,为了不消耗大量的内存,我可以从中删除不需要的元素(即元素已被使用,不再需要它们)所以从一开始我通过估计每次删除元素后所需的最大大小,可以分配更小的内存大小。 我用这种方式但是需要很长时间才能完成,有时需要30分钟! int x, y ; for (x = 0 ; x<number_of_elements_to_remove ; x++){ for (y = 0 ; y<size_of_array; y++ ){ array[y] = array[y+1]; } } 有比这更快的方法吗?