Tag: 数组

在c / c ++中初始化和清零数组的区别?

在c(或c ++)中,有什么区别 char myarr [16] = {0x00}; 和 char myarr [16]; memset(myarr,’\ 0’,sizeof(myarr)); ?? 编辑:我问这个是因为在vc ++ 2005中结果是一样的.. 编辑更多:和 char myarr [16] = {0x00,}; ? 也许可以得到更全面的答案,而不是含糊不清,因为下面的一些答案是指这种代码,即。 在关闭花括号之前放入逗号。 vc ++ 2005中的结果也是一样的。

检测不匹配的数组枚举初始值设定项

使用C进行嵌入式编程时,我发现自己多次使用枚举和数组进行映射,因为它们快速且内存效率高。 enum { ID_DOG = 0, ID_SPIDER, ID_WORM, ID_COUNT }; int const NumberOfEyes[ID_COUNT] = { 2, 8, 0 }; 问题是,有时在添加/删除项目时,我会犯错,枚举和数组不同步。 如果初始化列表太长,编译器将检测它,但不是其他方式。 那么有可靠和可移植的编译时检查初始化列表是否与数组的长度匹配?

在C中通过引用传递数组

我是C的新手,我有一个疑问。 由于C函数创建了它的参数的本地副本,我想知道为什么下面的代码按预期工作: void function(int array[]){ array[0] = 4; array[1] = 5; array[2] = 6; } int main(){ int array[] = {1,2,3}; function(array); printf(“%d %d %d”,array[0],array[1],array[2]); return 0; } 线路输出为4 5 6。 为什么这样做有效而以下情况不然? void function(int integer){ integer = 2; } int main(){ int integer = 1; function(integer); printf(“%d”,integer); return 0; } 在这种情况下,输出仅为1。 简短版本:为什么函数可以修改父变量的值,如果它们作为数组传递? 谢谢你们!

在C中的malloc,但使用多维数组语法

有没有什么方法可以malloc一个大型数组,但用2D语法引用它? 我想要的东西: int *memory = (int *)malloc(sizeof(int)*400*200); int MAGICVAR = …; MAGICVAR[20][10] = 3; //sets the (200*20 + 10)th element 更新:这一点很重要:我只想拥有一个连续的内存块。 我只是不想写一个像: #define INDX(a,b) (a*200+b); 然后参考我的blob: memory[INDX(a,b)]; 我更喜欢: memory[a][b]; 更新:我理解编译器无法按原样知道。 我愿意提供额外的信息,例如: int *MAGICVAR[][200] = memory; 没有这样的语法吗? 请注意我不仅使用固定宽度数组的原因是它太大而无法放在堆栈上。 更新:伙计们,我可以这样做: void toldyou(char MAGICVAR[][286][5]) { //use MAGICVAR } //from another function: char *memory = (char *)malloc(sizeof(char)*1820*286*5); fool(memory); 我收到一个警告, […]

字符数组后的奇怪字符

我是C的真正初学者,但我正在学习! 我之前偶然发现了这个问题,并决定询问原因是什么。 请解释一下你的答案,这样我才能学习。 我制作了一个程序,允许您输入5个字符,然后显示您编写的字符并还原它们,例如:“asdfg” – “gfdsa”。 奇怪的是,在输入的原始字符后显示一个奇怪的字符。 这是代码: char str[5]; char outcome[] = “OOOOO”; int i; int u; printf(“Enter five characters\n”); scanf(“%s”, str); for(i = 4, u = 0; i >=0; u++, i–){ outcome[i] = str[u]; } printf(“\nYou wrote: %s. The outcome is: %s.”, str , outcome); return 0; 如果我输入:“asdfg”它显示:“asdfg♣”,为什么? 谢谢你的时间,请解释你的答案:)

传递可变大小的多维数组

我试图理解将多维数组传递给c中的函数的“最佳实践”(或实际上是任何实践)是什么。 当然这取决于应用程序,因此我们考虑编写一个函数来打印可变大小的2D数组。 特别是,我对如何在下面的代码中编写函数printArry(__, int a, int b)感兴趣。 我省略了第一个参数,因为我不确定应该是什么。 void printArry(_____, int a, int b){ /* what goes here? */ } int main(int argc, char** argv){ int a1=5; int b1=6; int a2=7; int a2=8; int arry1[a1][b1]; int arry2[a2][b2]; /* set values in arrays */ printArry(arry1, a1, b1); printArry(arry2, a2, b2); }

如何在C中更改数组的大小?

我正在尝试一下gamestudio。 我正在制作射击游戏。 我有一个指针指向敌人的arrays。 我想要。 到敌人被杀时 将他从列表中删除。 而且我也想创造新的敌人。 Gamestudio使用名为lite-C的脚本语言。 它具有与C相同的语法,并且在他们说的网站上,它可以使用任何C编译器进行编译。 它是纯C,没有C ++或其他任何东西。 我是C的新手。我通常使用.NET语言和一些脚本语言编程,

在其他编译器中等同于MSVC的_countof?

是否有其他编译器提供的_countof内置等价物,尤其是GCC和Clang? 有没有非宏观forms?

为什么我们不能将新字符串分配给数组,而是分配给指针

我试图将一个字符串重新分配给预先初始化的数组a [],而我所能得到的只是一个错误 main() { char a[] = “Sunstroke”; char *b = “Coldwave”; a = “Coldwave”; b = “Sunstroke”; printf(“\n %s %s”,a,b); } [错误]:从类型’char *’分配类型’char [10]’时不兼容的类型..我搜索了这个但是找不到任何原因..我也尝试通过重新声明重新分配它 char a[] = “Sunstroke”; 但它没有奏效…… 但是在指针的情况下,有可能像上面的程序..

逐行访问矩阵元素与列方式

给出矩阵A[i][j] 。 如果我们想添加矩阵的元素,哪种方法更好,为什么? 列明智 划明 从我的角度来看,行方式更好,因为在数组表示元素存储在连续的内存位置,因此访问它们花费的时间更少。但是因为在RAM中获取每个位置需要相同的时间,这是否重要?