Tag: 数组

在C中,我可以在指针声明中初始化字符串,就像我可以在char数组声明中初始化字符串一样吗?

这两行代码是否实现了相同的结果? 如果我在函数中有这些行,那么在两种情况下字符串都存储在堆栈中吗? 除了不需要在第一行代码中声明空终止符之外,我是否应该使用一个而不是另一个? char s[] = “string”; char* s = “string\0”;

在教C时,在指针之前或之后教导数组会更好吗?

对于那些有课程开发经验的人:关于数组的最佳策略是什么? 我见过一些学校在变量和控制结构之后教授数组,甚至在教学function之前。 这允许教授一些基本的算法等。然而,它带来了如何将数组传递给函数的问题,因此有必要回到数组指针被教导和补丁。 另一个选择是从变量和控制结构转到函数,然后教指针,一旦你有指针,从头开始教数组,然后用它来进行动态内存分配。 对我来说第二个选项更有意义,因为与简单变量不同,使用数组很容易“超出范围”,但是尚未了解内存和指针的学生可能无法理解这些界限之外的内容。 但是,我很想知道其他人的想法。

尝试将指针指向函数中的指针时的Segfault

我正在尝试使用数组(malloc-ed),即自定义结构的arr 。 通过引用函数传递数组。 每当我在运行时尝试索引除函数中的arr[0]以外的任何东西时,我会得到一个段错误(例如(*arr[1])->i = 3; )。 为什么会这样? 完整的源代码是: #include #include #define SIZE 100 typedef struct{ int i; float f; }foo; void doSomething(foo ***arr); int main() { foo **arr = (foo**) malloc (SIZE * sizeof(foo*)); int i; for(i = 0; i i = 1; printf(“Before %d\n”,arr[1]->i ); doSomething(&arr); printf(“After %d\n”,arr[1]->i ); return 0; } void […]

strtok – char数组与char指针

可能重复: strtok不接受:char * str 使用strtok函数时,使用char *而不是char []导致分段错误。 这运行正常: char string[] = “hello world”; char *result = strtok(string, ” “); 这会导致分段错误: char *string = “hello world”; char *result = strtok(string, ” “); 任何人都能解释导致这种行为差异的原因吗?

这个for循环中发生了什么

我正在尝试别的东西,但突然陷入这种无限循环。 请建议一个答案,并解释下面的循环内容 #include int main() { int x=0; int i; int array[5]; for(i=0;i<=5;i++) { array[i]=x; printf("#%d value set in index %d\n",x,i); } return 0; } 当我在for循环的条件中删除=符号它工作正常。 但是当我把它放到无限循环时,为什么呢? 访问数组中的额外元素(超过其限制)是未定义的行为还是什么? 任何帮助将不胜感激。 提前致谢。 〜

传递一个二维数组,Works in C但不是C ++

我正在将二维数组传递给markfunction。 void mark(int n, int m, int i, int j, int canvisit[][m], int a[][m]){} 这段代码在Codeblocks上完美地运行,但在C ++中,我得到的错误如下: prog.cpp:9:55: error: use of parameter outside function body before ‘]’ token void mark(int n, int m, int i, int j, int canvisit[][m], int a[][m]){ ^ prog.cpp:9:56: error: expected ‘)’ before ‘,’ token void mark(int n, int m, int i, […]

多维数组和传输缓冲区

我试图将缓冲区保存为1800个字符的数组段。 当我尝试打印每个新缓冲区时,我能够传输缓冲区。 我输出为null。 我究竟做错了什么? 编辑 – 我将循环更改为此以将空终止添加到第二维的末尾。 现在输出告诉我它是null。 但printf(“%c”)表示数据已被转移。 while(buf_pos < msg_size+1){ if(buf_pos % 1800 == 0){ msg_buff[key_num][cbuf_pos]='\0'; key_num++; cbuf_pos=0; msg_buff[key_num][cbuf_pos]=buf[buf_pos]; }else msg_buff[key_num][cbuf_pos]=buf[buf_pos]; printf("%c",msg_buff[key_num][cbuf_pos]); cbuf_pos++; buf_pos++; }

Calloc用于C中具有负索引的数组数组

我有一个带负索引的数组数组。 它是一个具有实际尺寸[dim_y + 40] [dim_x + 40]的数组,但是用户使用的数据类似于维度[dim_y] [dim_x]。 首先,我有全局,已经定义了维度dim_x,dim_y,所以我有这个 int map_boundaries[dim_y + 40][dim_x + 40]; int (*map)[dim_x+40] = (int(*)[dim_x+40])&map_boundaries[20][20]; 它工作正常。 现在我需要维度dim_y和dim_x是可变的,这意味着我希望数组’map’没有固定大小但是动态,我需要从用户读取dim_y,dim_x和数组’map’是全球性的,所以我有 int **map_boundaries; 我在main()使用calloc map_boundaries = (int **)calloc(dim_y + 40,sizeof(int*)); for(i = 0; i < dim_y + 40; i++){ map_boundaries[i] = (int *)calloc(dim_x + 40,sizeof(int)); } ,但我不知道如何申报第二行 为了更好地理解边界,我在第2条评论中发布了这些内容: http : //everything2.com/title/Negative+array+indexing

c pthread传递int类型的数组

我传递一个int pthread_create类型的数组并得到错误: histogram.c:138:3: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default] expected ‘void * (*)(void *)’ but argument is of type ‘void * (*)(int *)’ void *output_results(); pthread_create(&t2, NULL, output_results, (void *)bins); void *output_results(int *bins) { some code }

char *和char 之间的区别

我已经阅读了很多关于它的线索和问题并阅读了很多答案,但仍然难以理解差异以及何时应该使用什么? 我认为你应该在需要存储数据时使用char *而你不知道它的大小,因为它是动态的。 另外我不确定我是对的,但是如果你声明一个char *并且给它分配一个像这样的文字文本,我不明白我的理解:char * ch =“hi”; 它是一个你无法改变的常量,如果你试图改变它,你只需将ch指向另一个分配的存储空间来保存新字符串? 如果这样写:char ch = malloc(20); 然后你可以改变价值,如果你这样做:char ch [] =“hi”; char pch = ch; 您可以更改值,因为您指向数组并且数组指向ch [0]? 所有用粗体写的都是我从阅读中理解的,虽然我可能对我刚才说的大部分内容都是错的,这就是为什么我需要一个非常好的简单解释,所以我可以一劳永逸地理解差异,当我应该用什么。 编辑: #include main() { char ch[] = “Hello”; char *p1 = ch; char *p2 = p1; char *p3 = *p1; printf(“ch : %s\n”, ch); printf(“p1 address [%d] value is %s\n”, p1, […]