Tag: 数组

使用备用最小 – 最大值对数组进行排序

给定一个数组我需要对它进行排序,使得第一个元素是最小值,第二个元素是最大的元素,第三个元素是第二个最小的元素,依此类推。 但我的代码只打印原始数组,我无法弄清楚原因。 任何意见,将不胜感激。 #include void swap(int m, int n); int main() { int i,j,A[10],n; printf (“enter the number of array elements\n”); scanf (“%d”, &n); for (i=0;i<n;i++){ scanf ("%d", &A[i]); } for (i=0;i<n;i++){ if (i%2 == 0){ for (j=i;j<n;j++){ if (A[j] < A[i]){ swap(A[i],A[j]); } } } else if (i%2 != 0){ for (j=i;j A[i]){ swap […]

C中的双重自由或腐败3d数组

在释放3d数组时,我遇到了“双重释放或损坏”错误。 任何人都可以告诉我代码中的问题在哪里? arrays的大小为2 * N * N. 这里N的值是100.即使没有铸造,也是相同的结果。 这是代码: // Mallocing double ***h = malloc(2 * (sizeof(double**))); for(i = 0; i < N; i++) { h[i] = malloc(N * sizeof(double*)); for(j = 0; j < N; j++) { h[i][j] = malloc(N * sizeof(double)); } } // Freeing for(i = 0; i < N; i++) { […]

试图理解C中的以下代码有什么问题

我有一个任务,找到这个代码错误的原因。 #include #include #define fail(a) ((test == 0 || test == a) ? fail##a() : 0) #define N (10) int a[N] = { 1 }; int* b = &a[0]; void fail1() { printf(“a[0] = %d\n”, a[0]); printf(“b[0] = %d\n”, b[0]); printf(“*b = %d\n”, *b); *b = 2; a[N] = 3; printf(“*b = %d\n”, *b); } […]

函数中的C和指针 – 更改不保存

我有这个简单的代码似乎工作(我检查调试器)但是当函数执行结束时,字符串不保存在原始变量中。 void getString(char *iText); int main() { char *inputText=malloc(sizeof(char)); getString(inputText); puts(inputText); free(inputText); system(“pause”); return 0; } void getString(char *iText) { char c; int i=0; while((c=getchar()) != ‘\n’) { iText = realloc(iText,sizeof(char)*(i+1)); iText[i]=c; i++; } iText = realloc(iText, sizeof(char)*(i+1)); iText[i]=’\0′; } 当这个小脚本结束时,我看到一些 ε■ε■ε■ε■ε■ε■ε■ε■ε■ε■ε■ε■▲יע`* 如果我在我的main函数中编写这段代码它正在工作,所以我猜这与我在函数中使用指针的方式有关。

从指针数组中查找重复项

我想找到一个指针数组中的重复项。代码如下所示。当我运行这个应用程序时,它是gining分段错误。但是当我提取这个function时,我能够运行它就好了。任何人都可以告诉我能做什么? 当我检测到重复项时,我只是将这些字符串放到名为output.txt的文件中。 我发现当使用strcmp时,它会给出这个分段错误。 但是当我提取这个函数并在一些测试代码上运行它时,它工作得非常好。 main() { char *a[20]; DIR *dip; int i = 0; dip = opendir(“src/my_folder”); char *condition_var; while ((dit = readdir(dip)) != NULL) { condition_var = dit->name; a[i] = condition_var i++; } findduplicates(a,i); } char *findduplicates(char *arr[3],int count) { int i = 0; int j = 0; int val = 0; FILE *output […]

关于C中数组初始化的困惑

在C语言中,如果初始化一个这样的数组: int a[5] = {1,2}; 那么未明确初始化的数组的所有元素将用零隐式初始化。 但是,如果我初始化这样的数组: int a[5]={a[2]=1}; printf(“%d %d %d %d %d\n”, a[0], a[1],a[2], a[3], a[4]); 输出: 1 0 1 0 0 我不明白,为什么a[0]打印1而不是0 ? 是不确定的行为? 注意:这个问题在接受采访时被问到。

如何分配具有内存的二维数组? 如何使用它来访问行和列? 举个例子

我创建了一个2 d数组,其内容如下 int i,j,lx,ly;// lx,ly are the row and column respectively double** a; a=(double**) malloc((lx+2)*sizeof(double)); a[0]= (double*) malloc((lx+2)*(ly+2)* sizeof(double)); assert(a[0]); for(i=1;i<lx+2;i++) { a[i]=a[i-1]+i*(ly+2); } //我为这个数组中的所有元素分配值0,如下所示 for(i=0;i<(lx+2)*(ly+2);i++) { a[i]=0; } //我打印下面的所有元素 for(i=0;i<(lx+2)*(ly+2);i++) { printf("position %d values %d\n",i,a[i]); } //当我看到输出时,它显示我在一个特定位置的垃圾值13.我无法弄清楚..还请告诉我如何访问像Eg这样的行和列来访问第7列第0行和第5行以lx表示第6行,如我的代码所示

变长数组VLA(静态绑定或动态)

自从我用基本数组编写基本编译器以来,已经有很长一段时间了,但最近我看到了这样的数组声明: int y; cin>>y; int z[y]; 用于给出错误的旧时编译器“数组的存储大小不是恒定的”。 然后我在C99中发现了可变大小的数组。 我想知道他们如何在内部工作。 这会使arrays动态吗? 这个内存是在堆分配的吗? 这种绑定是否仍然是静态完成的? 如果是这样的话。

__attribute __((packed))对嵌套结构数组的影响?

问题 我正在努力通过网络将原始结构发送到另一端的已知程序,但不得不担心用于对齐结构的静默引入的内存(其他问题,如字节顺序被覆盖)。 我正在使用的是: typedef struct __attribute__((packed)) { uint16_t field1; uint16_t field2; uint16_t field3; } packed_1_s; typedef struct __attribute__((packed)) { uint16_t fieldA; uint16_t fieldB; packed_1_s structArray[10]; } packed_2_s; typedef struct __attribute__((packed)) { uint16_t fieldX; packed_2_s fieldY; uint8_t arrayZ[20]; } data_s; 我理解通常,packed_1_s结构可以/将为结构的每个实例分配额外的空间,以将其填充到编译器的优选大小(取决于它所构建的硬件),并且有利的大小可以是2个字节的任何位置到64个字节(最近)。 通常情况下,如果我在packed_2_s中有一个packed_1_s的实例就没有问题,但是当我尝试将元素放入数组时,我会理解它们存在一些差异。 试图解决方案 gcc文档似乎建议通过简单地在packed_2_s定义中包含packed属性,即使它们是数组,这些字段也将尽可能紧密地包装,并且不会为packed_2_s结构添加空间以对齐元素数组。 关于align()属性的文档虽然表明数组的处理方式与其他字段不同,但需要在字段上直接设置align / packed属性,以便修改添加的额外间距以匹配指定的对齐(或缺少对齐)。 我尝试在structArray字段上设置packed属性,当它不起作用时,通过在上面的代码中设置arrayZ上的packed属性进行测试: packed_1_s structArray[10] __attribute__((packed)); uint8_t arrayZ[20] __attribute__((packed)); 两次尝试都给了我一个编译器警告,在这个上下文中没有理解packed属性并且会被跳过(我用“-Wall”构建的好东西)。 我希望绕过这个问题的方法是使用属性align(1),指示1字节的所需对齐,这与packed属性相当,但是文档说align()属性只能增加对齐和打包应该用于减少对齐。 […]

2Darrays和指针 – C.

只是试图真正让我的头围绕C中的数组和指针以及它们之间的差异,并且在使用2d数组时遇到了一些麻烦。 对于普通的1Darrays,这是我所学到的: char arr[] = “String constant”; 创建一个字符数组,变量arr将始终表示初始化时创建的内存。 char *arr = “String constant”; 创建一个指向char的指针,该指针当前指向char数组“String constant”的第一个索引。 指针可以稍后指向其他地方。 char *point_arr[] = { “one”, “two”,”three”, “four” }; 创建一个指针数组,然后指向char数组“one”,“two”等。 我的问题 如果我们可以同时使用: char *arr = “constant”; 和 char arr[] = “constant”; 那为什么我不能用: char **pointer_arr = { “one”, “two”, “three”, “four” }; 代替 char *pointer_arr[] = { “one”, “two”, “three”, “four” […]