Tag: 数组

C中n个数组的交集和并集

我有那些正在交叉/联合但只有两个数组的函数。 我需要改进它们以使用narrays:arr = {{1,2,3},{1,5,6},…,{1,9}}。 数组是有序的,它们的元素在它们中是唯一的。 示例(交叉点): 输入:{{1,2,3,4},{2,5,4},{4,7,8}} 输出:{4} arr1 [],arr2 – 数组 m,n – 数组交集函数的长度: int printIntersection(int arr1[], int arr2[], int m, int n) { int i = 0, j = 0; while(i < m && j < n) { if(arr1[i] < arr2[j]) i++; else if(arr2[j] < arr1[i]) j++; else /* if arr1[i] == arr2[j] […]

三星:char *(* arr)和char *** arr(在C中)有什么区别?

基本上,我有一个char *数组,我想在这个函数中传递和修改,所以我传入一个指向char *数组的指针。 也就是说,我想传递一个指向char * arr []的指针。 两者有什么区别?

如何消除将多维数组作为const多维数组传递的警告?

给出以下代码: /* signatures */ int getParams(char params[MAX_PARAM_LEN][MAX_LINE_LEN]); int getVersion(const char params[MAX_PARAM_LEN][MAX_LINE_LEN], const char* tagName ); /* initializing */ char params[MAX_PARAM_LEN][MAX_LINE_LEN] = {}; /* getting parameters */ paramCount = getParams(params); /* OK, params match with getParams signature */ /* processing the params array */ i = getVersion(params, “version”); /* warning: passing arg 1 of `getVersion’ from […]

结构数组在排序时给出错误的输出

1)我有一个结构 struct node { char symbol; int freq; int left, right,root; int value; short is_sorted; }; struct node data[1000]; 其中,通过从文件“Input.txt”作为唯一参数读取以下字母符号(符号)(abcdef)值来获得数据[215] .freq(频率){0,1,2,3,4,5}。现在我必须添加这个数组的两个最小频率,然后定位在同一个数组中获得的新元素,这样它将保持freq的增加顺序(它已经是排序数组,见我们有0,1,2,3 ,4,5)。 (2)我还必须注意两个最小添加元素不能再参与分类和添加,如果已经添加它们,它们必须固定在它们的位置一次,但是通过添加新获得的元素可以参与其中再次排序。 例如:我们添加两个最小元素0和1,0 + 1 = 1,因此“1”是通过加法获得的结果,现在这个“1”必须位于data [] .freq中,这样仍然应该有增加的顺序。 所以: data[i].freq = 0 1 1(added here) 2 3 4 5 现在我们必须再次找到最少两个节点(请再次阅读评论(2)以便了解。)我们不能再添加0 abnd 1,因为他们已经参与了添加。 所以这次我们将添加1和2(这个是在索引3,请不要与索引2处的那个混淆)。 所以我们得到1 + 2 = 3 0 1 1 2 3 […]

关于C中的gets()

我正在编写一个C程序,它有一个5元素数组来存储字符串。 我正在使用gets()来获取输入。 当我输入超过5个字符然后输出字符串时,它只给了我输入的所有字符。我知道字符串以\0结束,所以即使我超过了我的数组,它仍然会输出整个字符。 但我很好奇的是, gets()存储输入的位置,缓冲区还是直接进入我的数组? 如果我输入一个很长的字符串,会gets()尝试将字符存储在不应该触及的记忆中吗? 它会给我一个段故障吗?

字符串初始化程序和只读部分

假设我有一个数组(函数的本地)和一个指针 char a[]=”aesdf”和char *b=”asdf” 我的问题是,在前一种情况下,字符串文字”aesdf”是存储在只读部分中,然后复制到本地数组还是类似于 char a[]={‘a’,’e’,’s’,’d’,’f’,’\0′}; ? 我认为在这种情况下,字符直接在堆栈上创建,但在前面的情况下( char a[]=”aesdf” ),字符从只读部分复制到本地数组。 在可执行文件的整个生命周期中是否存在“aesdf”?

分段引用char数组时出错

#include int main(void) { char * p= “strings are good”; printf(“%s”,*p); return 0; } 有人可以告诉我为什么我在这里得到分段错误?

在这种情况下,数组索引中的字符表示如何工作?

我是C的初学者,我有这样的代码: #include main() { int i; int ndigit[10] = { [9] = 5 }; printf(“%d\n”,++ndigit[‘9’]); } 这打印的值如下: -1074223011 但是,当我将声明更改为: ++ndigit[‘9’-‘0’] 它正确打印该值 6 我想知道为什么需要在我的索引中添加-0才能使其正常工作? 为什么只提到++ndigit[‘9’] ,对我没有帮助? 提前致谢。

C 3d数组char

char monsternivel1[][3][4] = { {“Rat”,”Bat”,”Spider”}, {“Goblin”,”Orc”,”Drawf”}, {“Dragon”,”Lich”,”Banshee”}, {“Demon”,”Hydra”,”Giant Spider”} }; 它说 : > E:\Dungeon Crawler.c||In function ‘rndMonster’:| E:\Dungeon > Crawler.c|10|warning: initializer-string for array of chars is too > long [enabled by default]| E:\Dungeon Crawler.c|10|warning: (near > initialization for ‘monsternivel1[0][2]’) [enabled by default]| > E:\Dungeon Crawler.c|11|warning: initializer-string for array of chars > is too long [enabled […]

如何使用尺寸未知的2D数组?

我正在为矩阵乘法编写C函数。 它需要两个二维2D数组。 如果我知道输入数组的大小,我可以这样做,但我想做一个更通用的function。 如何在编译时不知道产品的尺寸时如何找到它们的尺寸以及如何返回数组?