Tag: 数组

在C中传递数组指针

所以我有一些看起来像这样的代码: int a[10]; a = arrayGen(a,9); 并且arrayGen函数如下所示: int* arrayGen(int arrAddr[], int maxNum) { int counter=0; while(arrAddr[counter] != ‘\0′) { arrAddr[counter] = gen(maxNum); counter++; } return arrAddr; } 现在,编译器告诉我“警告:传递’arrayGen’的参数1从指针生成整数而没有强制转换” 我的想法是我传递’a’,一个指向[0]的指针,然后由于数组已经创建,我可以只填入[n]的值,直到我a [n] ==’\ 0’。 我认为我的错误是arrayGen被写入接收数组,而不是指向一个数组。 如果这是真的我不知道如何继续,我会写地址值,直到一个地址的内容是’\ 0’?

C指针表示法与数组表示法相比:传递给函数时

我的问题基于以下代码: int myfunct(int ary[], int arysize) int myfunct2(int *ary, int arysize) int main(void){ int numary[10]; myfunct(numary, 10) myfunct2(numary, 10) return; } int myfunct(int ary[], int arysize) { //Whatever work is done } int myfunct2(int *ary, int arysize) { // Whatever work is done } 是否有理由使用其中一个而不是另一个? 详细说明,当涉及数值数组时,有任何理由想要在数组表示法上使用指针表示法。 如果使用指针表示法,那么在函数指针算术中将使用等等。如果使用[]数组表示法,则可以像往常一样使用数组。 我是编程新手,我目前看不到使用指针表示法有什么好处。 我的确切问题是,有没有理由使用指针表示法将数值数组传递给函数,因此在函数中使用指针操作。

施放T 到T *

将类型T的2D数组转换为T*并取消引用元素是否安全? 由于2D数组的存储器布局是线性的,因此基指针应该等于指向第一个元素的指针。 由于它们指向的最终类型也是相同的,因此不应存在任何对齐差异问题。 或者有一些方面会导致未定义的行为? 要明确我的意思是这样的 – int arr[10][10]; int p = *((int*) arr); 另外,同样的问题,如果我访问超出第一个数组的元素,即(int *)arr + 13.它是否属于超出界限的条款? 因为我访问第一个数组的边界之外。

使用两个线程在C / C ++中操作不同的数组索引时,是否需要同步?

假设我有一个如下定义的数组: volatile char v[2]; 我有两个线程(分别用A,B表示)操纵数组v 。 如果我确保A,B在任何时候使用不同的索引,也就是说,如果A现在正在操纵v[i] ,那么B要么什么都不做,要么操纵v[1-i] 。 我想知道这种情况需要同步吗? 我已经提到了这个问题 ,但我认为它在Java中是有限的。 我之所以提出这个问题的原因是,我在一个大型项目中一直在努力解决一个奇怪而罕见的错误,直到现在,我能解释这个错误的唯一原因是需要同步以上操纵。 (由于这个bug非常罕见,我很难certificate我的推测是否属实) 编辑:对于v ,可以进行读取和修改。

C中“array”的定义是什么?

该标准精心定义了数组类型 ,但我没有看到任何数组定义。 我们可能会说“数组类型的对象”,但是这不能正确,因为无类型对象(例如malloc分配的空间)被描述为数组。 动机: fprintf (C11 7.21.6.1/8)中%s的规格说: 参数应该是指向字符类型数组的初始元素的指针 但是取代码char s[] = “hello”; printf(“%s”, s+1); char s[] = “hello”; printf(“%s”, s+1); 然后我们传递了一个指向第二个元素的指针。 该定义似乎假设该数组表示任何一组连续的对象 。 编辑:看到我已经选择了一些“不清楚你要问的”投票,我的问题是:ISO / IEC 9899:2011使用的术语数组的定义是什么?

C令牌化并存储到数组中

我有一个文件,我想读取每一行,通过制表符标记它并存储到一个数组中。 但事实certificate,token [0] .. token [4]指向由strtok()产生的每个char的地址。 所以当我在文件的下一行调用strtok时,token [0] … token [4]会改变。 我该如何纠正? 如果我尝试使用char tokens[MAX_SIZE]而不是char* tokens[MAX_SIZE] ,则会发生转换错误,因为strtok返回char *。 该文件是 20 34 90 10 77 80 12 37 29 63 45 21 55 18 46 我的代码是: FILE *f; if ((f = fopen(“myinput.txt”,”r”)) == NULL) { perror(“Failed to open file:”); return -1; } char * line; size_t len […]

函数中char指针数组的大小

使用此代码: #include void printSize(char *messages[]) { printf(“%d”, sizeof(messages) / sizeof(char *)); } int main(void) { printf(“Size when through passing direct to function: “); printSize((char *[]){“Zero”, “One”, “Two”, “Three”}); printf(“\n”); printf(“Size when calculating in main: %d\n”, sizeof((char *[]){“Zero”, “One”, “Two”, “Three”}) / sizeof(char *)); return 1; } 我得到输出: Size when through passing direct to function: 1 […]

在C中释放()malloc的二维数组的最佳方法

假设我有一个用这样的东西创建的二维数组, char **foo = (char **) malloc(height * sizeof(char *)); for(i = 0; i <= height; i++) foo[i] = (char *) malloc (width * sizeof(char *)); 首先,这甚至是创建像这样的数组的正确方法吗? 这里的问题是,’height’和’width’是在运行时设置的东西。 这似乎有效,但这是释放这个2Darrays的最佳策略。 免费(funge)听起来不对。 通过这里的其他post,我想我会逐一释放每一行? 我确实试过这样的事, for (height = 0; height funge_height; height++) { free(funge[height]); } free(funge) 然而,这给了我一个双重自由指针exception。 这是不是意味着,我不需要管理这段记忆? 我的印象是,对于每个malloc的内存,我们应该调用free()。

字符串可以用作数组索引吗?

字符串可以用作C中的数组索引吗? 例如:字符串对应值“ONE”1“TWO”2“五”5“十”10 当上面列表中的字符串传递给函数时,该函数必须返回上面指示的相应值。 可以通过声明一个以字符串作为索引的常量数组来实现 int *x; x[“ONE”] = 1; x[“TWO”] = 2; x[“FIVE”] = 5; x[“TEN”] = 5; return x[“string received by the function”]; 上述逻辑不能按预期工作; 是否有一个解决方法来实现上述逻辑,以便有一个字符串索引数组?

为什么会产生分段错误?

#include void foo(int **arr) { arr[1][1]++; } main() { int arr[20][20]; printf(“%d\n”,arr[1][1]); foo((int**)arr); printf(“%d\n”,arr[1][1]); }