Tag: 数组

填充整数数组与填充浮点数相同吗?

我刚刚被介绍给C,我被分配编写了一个程序,可以模仿杂货店的自助退房线。 这涉及我必须根据用户输入填充杂货项目的价格数组,并将它们添加并复制到文件中。 填充整数数组的最简单方法是使用for循环。 但是对于float类型的数组会有什么不同吗? 它看起来像这样吗? 或者这是不正确的? int size, i; float items[size]; printf(“How many items are you checking out today?”); scanf(“%d”, &size); for(i=0;i<size;i++){ printf("Enter the price of an item\n"); scanf("%f", items[i]); } 我是这个网站的新手,所以提前感谢

需要建议以有效的方式确定C中的数组大小

在java中,java脚本和其他语言有array.length函数可用于了解循环和其他需要的数组长度。 在C编程我正在使用 sizeof() 运算符,用于通过以下过程确定数组大小或数组长度: int array [] ={12, 3, 4, 6}; for (int i = 0; i < (sizeof(array)/sizeof(int)); i++) { // do sometings } 我想知道的是 sizeof(array)/sizeof(int) 查找数组大小有效吗? 或者,如果其他方式有效,请建议我。

获取LLVM getelementptr的操作数名称

我试图获取getelementptr指令引用的数组的名称。 当数组被索引到实际c代码中使用中间变量时,这似乎有效 int a = 0; i[a] = 3; 在这种情况下,我得到以下bitcode %arrayidx = getelementptr inbounds [2 x i32], [2 x i32]* @i, i64 0, i64 %idxprom store i32 3, i32* %arrayidx, align 4 在这种情况下,我可以迭代getelementptr指令的操作数,并通过第一个操作数上的getName()方法找到数组的名称(i)。 但是,如果在源代码中,数组直接索引, i[0] = 3; 然后,生成的bitcode如下 store i32 3, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @i, i64 0, i64 0), […]

如何使用用户输入值填充C中的2D数组?

注意:这是一个家庭作业问题。 使用FOR构造来使用用户给出的值填充2D板。 程序要求板尺寸为n,m,然后询问每个板的值。 我的尝试 #include int main(){ printf(“Enter the number of columns”); int i = scanf(“%d”,&i); printf(“Enter the number of rows”); int y = scanf(“%d”,&y); int r[i][y]; int a; int b; for (a=0; a<i; a++){ for(b=0; b<y; b++){ int r[a][b] = scanf("%d",&a,&b); //bug } } } Bug: c:13 variable-sized object may not be initialized 编辑: […]

模块化编译时arrays扩展

让我们说我在这个场景中: main.c: #include #include #include “header.h” int iCanProcess (char* gimmeSmthToProcess); int processingFunctionsCount = 0; int (*(*processingFunctions)) (char*) = NULL; int addProcessingFunction(int (*fct)(char*)) { processingFunctionsCount++; processingFunctions = realloc(processingFunctions, sizeof(int (*)(char*))*ProcessingFunctionsCount); processingFunctions[processingFunctionsCount-1] = fct; } int main(int argc, char *argv[]) { char* dataToProcess = “I am some veeeery lenghty data”; addProcessingFunction(iCanProcess); [ … ] for(unsigned int i […]

如果我在全局范围内声明一个没有大小的数组,我会得到什么?

在C中打高尔夫球技巧 的答案之一中 ,我看到了这段代码(ungolfed版本): s[],t; main(c){ for(scanf(“%*d “); ~(c=getchar()); s[t++]=c) putchar(s[t]); } 我认为上面的节目展示了UB(但谁在关心代码高尔夫?)。 但我不明白的是全局范围内的s[] 。 我知道当未指定全局变量的类型时,它默认为int 。 我创建了一个令人惊讶的编译的小程序: #include int s[]; int main(void) { printf(“Hello!”); } 虽然它发出一个警告: prog.c:23:5: warning: array ‘s’ assumed to have one element [enabled by default] int s[]; ^ 上面的程序是什么? 它是int*还是别的什么? 这在任何地方都有用吗?

分配几个相同类型的数组

我需要分配几个相同类型和形状的数组。 一开始,我做了类似的事情: void alloc_arrays_v1(size_t nmemb) { int *a1, *a2, *a3; a1 = malloc(nmemb * sizeof int); a2 = malloc(nmemb * sizeof int); a3 = malloc(nmemb * sizeof int); /* do some stuff with the arrays */ free(a1); free(a2); free(a3); } 为避免多次调用malloc和free ,我将上面改为: void alloc_arrays_v2(size_t nmemb) { int *a, *a1, *a2, *a3; a = malloc(3 * […]

C和C ++之间不完整数组指针转换规则的差异

当我用gcc和g++编译下面的代码时, g++给出错误而不是gcc 。 请注意,代码从int (*)[4]为int (*)[] (指向不完整数组类型的指针)。 int arr[4]; int (*p_arr)[] = &arr; 如不完整数组类型中所述? , C语言允许这种转换。 但是为什么C++不允许这样做并给出错误error: cannot convert ‘int (*)[4]’ to ‘int (*)[]’ in assignment 。 我知道C ++比C更安全类型,但是这个赋值实际上是类型不安全的,因为后来指针的引用(例如sizeof(*p_arr) )无论如何都会在C出错?

用户定义的类型,动态大小为C

我想定义一个新的数据类型,由一个由用户输入的大小的数组组成。 例如,如果用户输入128,那么我的程序应该创建一个新类型,它基本上是一个16字节的数组。 这个结构的定义需要是全局的,因为我将在我的程序中使用该类型。 这个结构必须有一个动态大小,因为我最终会有一个由这种类型的变量填充的HUGE数据库。 我现在的代码是: struct user_defined_integer; . . . void def_type(int num_bits) { extern struct user_defined_integer { int val[num_bits/sizeof(int)]; }; return; } (这不起作用) 我发现,与我的问题最接近的是: 我需要在C中创建一个全局数组,其大小由用户输入 (这没有帮助) 有没有办法做到这一点,以便我的结构在整个文件中被识别?

具有灵活数组成员的结构数组如何表现?

正如标题所述,我想知道具有灵活数组成员的C结构数组如何表现。 这是一个例子: struct vector { size_t length; double array[]; }; 维基百科的文章说: 这种结构上的sizeof运算符需要给出灵活数组成员的偏移量。 在我的机器上,这对应于8个字节( sizeof(size_t) )。 但是,当我执行以下操作时会发生什么: 显然,数组不能保存向量v0的数据,因为它只有3 * 8字节= 24字节宽。 我该如何处理这样的情况? #define LENGTH 10 int main() { struct vector arr[3]; struct vector *v0 = calloc(1, sizeof(*v0) + LENGTH * sizeof(v0->array[0])); v0->length = LENGTH; size_t i; for (i = 0; i length; i++) { v0->array[i] = […]