Tag: 数组

array 和array 之间有什么区别?

如果我的二维数组是int数组[4] [5] = {1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16,17, 18,19,20}; 当我打印一个位置:printf(“%d \ n”,数组[2,0]);. 这是在不给&的情况下打印值的地址。 但如果我这样打印:printf(“%d \ n”,&array [2] [0]); 它是值的打印地址。 正如我已经给它&它打印地址。 但两个地址都不一样。 但如果我打印printf(“,:%d \ n”,数组[3,0]); 它正在打印相同的数组地址[2,0]。 访问数组元素的[2] [0]和[2,0]之间有什么区别。

大数组声明的分段错误

我想用2mil声明一个unsigned long long数组。 元素。 当我第一次定义数组const的长度然后定义数组时,我得到一个分段错误错误。 但是当我将长度定义为unsigned long long时,声明起作用。 int main(int argc, const char *argv[]) { const unsigned long long lim = 2000000; //If I omit const, it works. unsigned long long nums2lim[lim]; exit(EXIT_SUCCESS); } 有人知道为什么会抛出分段错误吗?

计算数组中重复的元素

计算数组中的重复元素…..输入是{1,1,1,1,2,2,2,3,3,4}输出 1=4 2=3 3=2 4=1

在动态分配的2Darrays上使用realloc()是个好主意吗?

我主要对缩小这样一个数组的可行性感兴趣。 我正在开发一个项目,我在其中使用单个malloc()调用来创建各个中等大小的2D数组。 (每个只有几十个MiB,最大的。)事情是,在其中一个arrays的生命周期中,其内容大小缩小(超过一半)。 显然,我可以在程序的生命周期中单独保留数组大小。 (它只有一个具有GiB RAM的系统上的x MiB。)但是,我们正在谈论超过一半的分配空间在程序终止之前就被废弃了,并且,由于我使用的方式的性质数组中,所有幸存数据都保存在一组连续的行中(在块的开头)。 如果我真的不需要它,那么抓住所有RAM似乎是浪费。 虽然我知道realloc()可用于缩小动态创建的数组,但2D数组​​更复杂。 我想我理解它的内存布局(因为我实现了构造它的函数),但这推动了我对语言及其编译器工作的理解的极限。 显然,我将不得不处理行(并处理行指针),而不仅仅是字节,但我不知道所有这些的结果是多么可预测。 并且,是的,我需要使用单个malloc()创建数组。 有问题的对象有几百万行。 我尝试分别使用一个循环到malloc()每一行,但程序总是冻结在大约100,000 malloc()s。 对于后台,我用来构造这些数组的源代码如下: char ** alloc_2d_arr(int cnum, int rnum) { /* ((bytes for row pointers + (bytes for data)) */ char **mtx = malloc(rnum * sizeof (char *) + rnum * cnum * sizeof (char)); /* Initialize each row pointer to the […]

在Struct中存储和访问2D数组

我正在尝试在C中编写一个程序,根据用户输入生成螺旋并将其打印到控制台。 我无法弄清楚如何访问我在结构“螺旋”中定义的2D数组“数据”。 如何修复“警告:从不兼容的指针类型分配”错误? #include typedef struct Spiral { int size; int **data; } Spiral; Spiral generateSpiral(int size); void printSpiral(Spiral spiral); static int rotate(); int main() { int size; scanf(“%d”, &size); Spiral spiral = generateSpiral(size); printSpiral(spiral); return 0; } Spiral generateSpiral(int size) { int data[size][size]; int i; for (i = 0; i < size; i++) { […]

枚举具有N个元素的1d数组的所有k分区?

这似乎是一个简单的请求,但谷歌不是我的朋友,因为“分区”在数据库和文件系统空间中得分很多。 我需要将N个值(N是常数)的数组的所有分区枚举成k个子数组。 子数组就是 – 起始索引和结束索引。 将保留原始数组的整体顺序。 例如,N = 4且k = 2: [ | abcd ] (0, 4) [ a | bcd ] (1, 3) [ ab | cd ] (2, 2) [ abc | d ] (3, 1) [ abcd | ] (4, 0) 并且k = 3: [ | | abcd ] (0, 0, 4) […]

关于字符串长度,终止NUL等

我正在学习C,我对char数组和字符串之间的差异以及它们如何工作感到困惑。 问题1: 为什么源代码1和源代码2的结果有所不同? 源代码1: #include #include int main(void) { char c[2]=”Hi”; printf(“%d\n”, strlen(c)); //returns 3 (not 2!?) return 0; } 源代码2: #include #include int main(void) { char c[3]=”Hi”; printf(“%d\n”, strlen(c)); //returns 2 (not 3!?) return 0; } 问题2: 字符串变量与char数组有何不同? 如何使用允许\ 0存储的最小所需索引号来声明它们(请阅读下面的代码)? char name[index] = “Mick”; //should index be 4 or 5? char name[index] = {‘M’, […]

查找最大和的连续子数组

我正在编写一个代码来查找C中的最大和连续子数组。根据我的说法,逻辑似乎很好,但输出仍然不正确。 请查看代码。 该算法将较大的arrays分成2个子arrays。 然后通过检查左数组,右数组以及包含中点的数组来检查最大和子数组(它将检查中点的左右两边,然后返回包含中点的最大和子数组)。 int* cross_max(int arr[], int low, int mid, int high) { int left_max, left_sum = -2000; int sum = 0; int i; for(i=mid; i>=low;i–) { sum = sum + arr[i]; if(sum > left_sum) { left_sum = sum; left_max = i; } } int right_max, right_sum = -2000; for(i=mid+1; i right_sum) { right_sum […]

测试getchar()== EOF不能按预期工作

我有一个编写“编写一个允许用户输入最多20个整数的C程序的任务(它将停止接受基于哨兵值或基于达到20个整数限制的数字)。程序应该显示数字以相反的顺序进入。“ 我决定将我的哨兵值设为“EOF”(或CTRL + D / CRTL + Z)。 我的代码有一些非常不稳定的行为: 您必须按两次EOF键(这也会创建一个在数组中计算的空白条目。 第一个条目的第一个数字被截断。 其他一切似乎都行不通,但这显然不是理想的结果。 以下是我的代码。 你能解释一下是什么问题吗? main() { int i,iMax; double dblMean; int x[MAX]; printf(“Please Enter Up to 20 Integers\n”); for (i=0; i “,i+1); if (getchar() == EOF) /* Check for CTRL+D OR CTRL+Z */ break; /* Exit loop if EOF entered :: Must be pressed twice […]

简单的C数组声明/赋值问题

在更高级别的语言中,我将能够在C中使用类似于此示例的内容,并且它会很好。 但是,当我编译这个C例子时,它会痛苦地抱怨。 如何将新数组分配给我声明的数组? int values[3]; if(1) values = {1,2,3}; printf(“%i”, values[0]); 谢谢。