Tag: 数组

相对于另一个arrays重新排列数组

我有两个并行的数组: defenders = {1,5,7,9,12,18}; attackers = {3,10,14,15,17,18}; 两者都是排序的,我想要做的是重新排列防御arrays的值,以便他们赢得更多的游戏(防御者[i]>攻击者[i])但我在如何交换防守arrays中的值时遇到问题。 所以实际上我们只针对攻击者使用防御arrays。 我有这个,但如果有的话,它没有太大的变化,我很确定我做得不对。 它被认为是一种powershell方法。 void rearrange(int* attackers, int* defenders, int size){ int i, c, j; int temp; for(i = 0; i<size; i++){ c = 0; j = 0; if(defenders[c]<attackers[j]){ temp = defenders[c+1]; defenders[c+1] = defenders[c]; defenders[c] = temp; c++; j++; } else c++; j++; } } 编辑:之前我确实问过这个问题,但我觉得好像我措辞严厉,并且不知道如何“碰撞”旧post。

如何检查数组中的非零值(元素)

我想知道如何编写一个函数来返回是否至少有三个值不等于0.我已经搜索了类似的问题,但我找不到任何有效的解决方案。 为了解释我的问题,这里有一个例子: 我有一个包含这些元素的数组: [1,0,2,0,4,0,0,3,0,0] 。 我想检查是否至少有3个元素不等于零。 如果至少有3个元素,我的代码将返回1 != 0 ,如果少于3个元素,则返回0 !=0 。 所以在我的例子中它应该返回1 。

如何在C中初始化二维字符串数组的行

我想使用指针将字符串存储在2D数组中,但我对如何操作感到困惑。 我见过的例子只使用int数组或使用方括号[]来分配固定大小的内存。 所以我正在尝试初始化我的2D字符串数组,这就是我所拥有的: char ** stringArr = (char**)malloc(/*I don’t know what goes here*/); for(i = 0; i < rows; i++) stringArr[i] = (char*)malloc(cols *sizeof(char)); 正如你可以看到我第一次调用malloc的参数一样,如果我想要一个精确的x行数,我会被困在哪里,每行都存储一串字符。 任何帮助,将不胜感激!

将char复制到char数组

我试图将一个“字符串”复制到C中的字符串数组: const gchar *strAuth, *strEditor, *strTitle; gchar *strings[18][150]; strcpy(strings[0],strAuth); 在编译时,gcc发出警告:警告:从不兼容的指针类型[默认启用]传递’strcpy’的参数1 可能,由于我的这个错误,检查和打印在代码的后半部分 g_print(“%s”, strings[0]); int i=0; while (i <= 18) { if (strlen(strings[i]) != 0) { g_string_append_printf(tstring, "\t%s=\"%s\",\n", keyword[i], strings[i]); i++; } } 也没有用(它也打印空字符串)。 C不是我的语言,所以请帮忙 注意:攻击这个和这个 ,但没有帮助自己NB:gchar“对应于标准的C char类型。” 在滑稽

strcpy和printf一个多维char数组C.

说我有一个arrays char messages[10][2][50]; strcpy的正确语法是什么,以便将数据放入其中一个字符串(大多数为50的内部字符数组),然后通过%s将其提供给printf的相应约定? 就此而言,我是否以正确的顺序声明了数组下标? 它是10批,成对(2)字符串。 每个字符串宽50个字符。 01{{50 chars},{50 chars}} 02{{50 chars},{50 chars}} … 09{{50 chars},{50 chars}} 10{{50 chars},{50 chars}} 各种互联网资源似乎与哪些下标省略冲突,无论我尝试什么似乎都会产生意想不到的结果。 你可以填写下面的空白吗? strcpy(message???, “Message 1 Part 1”); strcpy(message???, “m1 p2”); strcpy(message???, “m2 p1”); strcpy(message???, “m2 p2”); strcpy(message???, “m3 p1”); strcpy(message???, “m3 p1”); //So on… int i; for(i=0;i<10;i++) printf("%s, %s\n", message???, message???); 这样arrays具有并保持的结构: 01{{“Message 1 Part […]

无法返回int数组

我想只使用studio.h库通过使用数组来存储余数但从十进制数转换为二进制数但结果不正确,也许我有内存分配问题或返回值有误,请帮我检查一下。 非常感谢! #include int n = 0; int* DecimalToBinary(int number){ int a[10]; while(number!=0){ a[n++] = number%2; number/=2; } return a; } void main(){ int *d1 = DecimalToBinary(5); int *d2 = DecimalToBinary(10); for(int i = n-1 ;i>=0;i–) printf(” %d”,d1[i]); printf(“\n”); for(int i = n-1 ;i>=0;i–) printf(” %d”,d2[i]); }

将内存分配给字符串数组

我想用两个函数填充一个字符串数组:第一个,如果我有n个字符串要分配,将分配n个内存空间; 第二个将为每个读取的字符串分配内存 这是第一个function: char** allocate(int n) { char** t; t=(char**)malloc(n*sizeof(char*)); if(!t) exit(-1); return t; } 这是第二个: void fill(char*** t,int n) { int i; char* help=” “; for(i=0;i<n;i++) { printf("\n saisir la chaine n %d :",i+1); scanf("%s",help); *t[i]=(char*)malloc((strlen(help)+1)*sizeof(char)); strcpy(*t[i],help); } } 我没有忘记像这样打电话给第二个: fill(&t,n); 问题是我在读完第一个字符串并且程序结束后出错。

没有malloc的c中的动态内存分配

这是我的一位朋友写过的C程序。 据我所知,在C99引入VLA之前,或者在运行时使用malloc之前,必须在编译时初始化数组。 但是这里程序接受用户的const值并相应地初始化数组。 它工作正常,即使使用gcc -std=c89 ,但对我来说看起来非常错误。 是否所有编译器都依赖? #include int main() { int const n; scanf(“%d”, &n); printf(“n is %d\n”, n); int arr[n]; int i; for(i = 0; i < n; i++) arr[i] = i; for(i = 0; i < n; i++) printf("%d, ", arr[i]); return 0; }

如果我的指针穿过数组边界会发生什么?

我在下面创建了一个代码,我需要跟踪一个数组,增加指向数组的指针,并在数组结束时停止。 我使用下面的代码测试,显然在增加ptr和打印*ptr 1000次迭代之后,我得到0作为值。 那么数组的最后一个元素总是0是真的吗? 如果动态创建数组长度(我不允许使用链接列表),如何告诉ptr停在最后一个元素? 我担心,如果我使用下面的代码,有一天我会遇到printf i = 1000,它会返回我随机的内存位置(对于下面的代码,它不是真的,但是谁知道)… #include int my_array[] = {1,23,17,4,-5,100}; int *ptr; int main(void) { int i; ptr = &my_array[0]; /* point our pointer to the first element of the array */ printf(“value of ptr is %d\n”, *ptr); for(i=0; i<1000; i++){ ptr++; } printf("value of ptr is now %d", *ptr); return […]

指向数组第一个元素的指针的地址?

我是一个迷茫的指针,它指向一个指向数组开头的指针。 根据我的理解,数组和指针可以使用相同的函数,如*,&和[]。 所以,如果我创建一个char数组,我理解:buffer ==&buffer [0]。 所以没有括号的arrayname就像一个包含数组第一个条目地址的指针,对吧? 但是当我试图找出指针的地址(其中存储&buffer [0]的地址)时,它将给出与指针(&arrayname [0])中存储的相同的值。 怎么可能? 虚拟RAM中的相同地址如何包含一个地址和buffer [0]的值(在下面的代码中等于’H’)? #include #include void main() { char buffer[] = “Hello”; printf(“Address buffer: %d\n”, &buffer); printf(“Value buffer: %d\n”, buffer); printf(“Address buffer[0]: %d\n”, &buffer[0]); printf(“Value buffer[0]: %c\n”, buffer[0]); printf(“Address buffer[1]: %d\n”, &buffer[1]); system(“pause”); } 所以基本上我对第一个输出感到困惑。 不应该与第二个不同吗? 非常感谢您的解释…… 问候