Tag: 数组

在C中复制结构数组

我已经很久没有使用C语言了,这让我发疯了。 我有一个结构数组,我需要创建一个将一个数组复制到另一个数组的函数(我需要一个精确的副本),但我不知道如何定义函数调用。 我想我需要使用指针,但是当我尝试它时会给我一个错误。 struct group{ int weight; int x_pos; int y_pos; int width; int height; }; struct group a[4]; struct group b[4]; copySolution(&a, &b); 最后一个声明给我发错了。 正如我所说,用C编程已经很久了,所以我现在有点迷失了:(

char数组可以与任何数据类型一起使用吗?

malloc()函数返回void*类型的指针。 它根据作为参数传递的size_t值以字节为单位分配内存。 生成的分配是原始字节,可以与C中的任何数据类型一起使用(无需转换)。 可以在返回void *的函数中声明类型为char的数组,可以与任何数据类型一起使用,例如生成的malloc分配吗? 例如, #include void *Stat_Mem(); int main(void) { //size : 10 * sizeof(int) int buf[] = { 1,2,3,4,5,6,7,8,9,10 }; int *p = Stat_Mem(); memcpy(p, buf, sizeof(buf)); for (int n = 0; n < 10; n++) { printf("%d ", p[n]); } putchar('\n'); return 0; } void *Stat_Mem() { static char Array[128]; return […]

C找到静态数组大小(防止错误)

查找静态数组的大小是一种常见操作。 参见: C找到静态数组大小 – sizeof(a) / sizeof((a)[0]) 这可以包装成一个宏,例如: #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 但是它可能会意外地传入常规指针。 例如: void func(SomeArray **foo) { int i = ARRAY_SIZE(foo); } void func(SomeArray **foo) { int i = ARRAY_SIZE(foo); } 虽然它的有效C,但往往最终成为一个逻辑错误。 它可以防止这种错误(利用每个处理器在零长度位字段上失败) 。 #define ARRAY_SIZE(a) \ ((sizeof(struct { int isnt_array : \ ((const void *)&(a) == &(a)[0]); }) * 0) + \ […]

可变长度与Malloced ed数组

根据c99标准,我们可以编写以下代码,它是完全合法的 int x; scanf(“%d”,&x); int ar[x]; 我的问题是,如果我可以分配这样的数组,为什么我需要malloc再次分配可变大小的数组? 另外,请您解释一下可变长度数组的分配情况如何? 内心深处,是否调用malloc来分配数组或者是什么?

结构指针数组的内存分配

我正在尝试在C中构建一个内存分配器。用户首先要说明他想要使用多少内存,以及可以提供的最小内存块大小。 因此,举例来说,假设用户请求最小块大小为8B的1024B。 这意味着可能的块大小将是1024,512,256,128,64,32,16和8。 为了跟踪空闲的内存块,我有一个结构指针数组。 这些结构称为Header,该数组称为FreeList。 我的意思是FreeList [0]将包含一个指向内存空间的指针,其中有一个内存块大小为8. FreeList [1]将包含一个指向内存空间的指针,其中有一块内存大小为16等等 typedef void * Addr; struct Header { Addr next; int order; }; struct Header *FreeList[]; 我正在尝试为此空闲列表分配内存以使用以下代码: FreeList = malloc(Order*sizeof(struct Header)); 其中Order是您可以拥有的不同块大小的数量。 我收到编译错误’FreeList’的类型不完整。 我不希望这些指针指向任何地方,我只想为数据分配空间。

如何将数组的所有元素初始化为零,并将第一个元素初始化为1

这是程序数组自动初始化为零,当声明为int arr [10] = {1}时,第一个元素初始化为1 #include int main() { int i; int arr[10]={1}; for(i=0;i<10;i++) { printf("\n%d",arr[i]); } return 0; } 如何将数组元素初始化为零,期望第一个元素?

不完整数组类型的p 和* p的等价性

考虑以下代码(它是由于此讨论而产生的): #include void foo(int (*p)[]) { // Argument has incomplete array type printf(“%d\n”, (*p)[1]); printf(“%d\n”, p[0][1]); // Line 5 } int main(void) { int a[] = { 5, 6, 7 }; foo(&a); // Line 10 } GCC 4.3.4 抱怨错误消息: prog.c: In function ‘foo’: prog.c:5: error: invalid use of array with unspecified bounds GCC 4.1.2中的相同错误消息,似乎是-std=c99 , […]

C中的数组初始化

我对以下代码有疑问: int main() { int array1 = {1,2,3,4,5}; //error in c++ , warning in c int array2[] = {1,2,3,4,5}; int array3[5] = {1,2,3,4,5}; } 这段代码在c++第3行给出了错误,但在c却没有? 我知道array1实际上是一个int而array2和array3是数组,所以为什么c编译器没有显示错误,只是一个警告:“标量初始化中的多余元素” 是否使用了这样的定义,为什么它在c有效?

如何在C中的char数组中搜索字符串?

例如我有: char buff[1000]; 我想搜索字符串“hassasin”是否在该char数组中。 这是我尝试过的。 char word[8] = “hassasin”; char Buffer[1000]=sdfhksfhkasd/./.fjka(hassasin)hdkjfakjsdfhkksjdfhkjh….etc int k=0; int t=0; int len=0; int sor=0; for (k=0; k<1000; k++){ for (t=0; t<8; t++){ if (Buffer[k]==word[t]) len++; if (len==8) "it founds 0.9.1" } }

C中的多维数组:它们是锯齿状的吗?

关于C编程语言(ANSI-C)的一个简单问题: C中的多维数组是锯齿状的吗? 我的意思是 – 我们在谈论“数组数组”(一个指向内存中其他地址的指针数组),或者这只是“长一维数组”(它是按顺序存储在内存中)? 困扰我的是我有点确定: matrix[i][j]相当于* ( * (matrix + i) + j)