这是家庭作业的一部分。 我试图在我的方法getLine中读取并返回一行文件。 char *getLine(FILE *input) { char line[30]; if(fgets(line, sizeof(line), input)!=NULL) { return line; }else{ return NULL; } } 这似乎与我所教的关于指针的工作有关,但是我无法删除警告消息warning: function returns address of local variable [enabled by default] 。 该警告是指线路return line; 。 我的作业要求编译时没有警告或错误。 我不明白我做错了什么。 我发现的大多数帮助建议为文本行提供malloc-ing空间,但是我们还没有在课堂上讨论过这个问题,即使我已经在另一个类中完成了一些操作。 这真的是最好的方法吗? 如果是这样,我可以在该计划的任何地方免费吗?
我应该使用指针在数组中交换int。 它编译时没有错误或警告并运行,但不会交换整数。 任何的意见都将会有帮助!!! 这是测试人员: #import void swap( int ary[] ); int main( int argc, char*argv[] ) { int ary[] = { 25, 50 }; printf( “The array values are: %i and %i \n”, ary[0], ary[1] ); swap( ary ); printf( “After swaping the values are: %i and %i \n”, ary[0], ary[1] ); return 0; } […]
如果我有一个2d数组B定义为: int B[2][3] = {{1,3,5},{2,4,6}}; int **p = B与int (*p)[3] = B吗? int **f = B; printf(“%d “,*f+1); 输出5作为输出,而printf(“%d “,*f)给出1作为答案。 为什么会这样? printf(“%d “,**f); 返回分段错误! 为什么?
我知道如何使用指针。 但我不知道这是怎么回事: 我有一个hex地址,当然它有任何应用程序的任何值。 我知道找到我想要的地址。 我想编写一个C代码将此地址传递给指针变量,然后我可以从该地址捕获值,依此类推。 例如: hex 0x00010010 int *pointer; 如何将此地址传递给指针,这是什么语法?
据我所知,当一个指针传递给一个函数时,它只是一个真实指针的副本。 现在,我想要更改真正的指针,而不必从函数返回指针。 例如: int *ptr; void allocateMemory(int *pointer) { pointer = malloc(sizeof(int)); } allocateMemory(ptr); 另一件事,就是我如何将内存分配给2个或更多维数组呢? 不是通过下标,而是通过指针算术。 这是: int array[2][3]; array[2][1] = 10; 同样如下: int **array; *(*(array+2)+1) = 10 另外,为什么我必须传入指向函数的指针的内存地址,而不是实际的指针本身。 例如: int * a; 为什么不: allocateMemory(*a) 但 allocateMemory(a) 我知道我总是要这样做,但我真的不明白为什么。 请向我解释。 最后一件事是,在这样的指针中: int *a; 是包含实际值的内存地址,还是指针的内存地址? 我一直认为a是它指向的实际值的内存地址,但我不确定。 顺便说一下,当打印这样的指针时: printf(“Is this address of integer it is pointing to?%p\n”,a); printf(“Is […]
有关使用malloc函数为矩阵分配内存空间的良好迹象吗? 在这些日子里,当我需要使用malloc来管理它们时,我看到许多编码器以“坏”的方式编写矩阵。 我觉得我错了吗? 我所说的“坏”代码的一个例子如下: int main() { char **row; int width=80, height=24, i, j; row = malloc(height * sizeof(char *)); for(i = 0; i < width; i++) row[i] = malloc(width * sizeof(char)); for(i = 0; i < height; i++) { for(j = 0; j < width; j++) { row[i][j] = i*j; } } return 0; […]
在这篇由Andrey Karpov撰写的题为“关于size_t和ptrdiff_t ”的博客文章中,他展示了一个例子, for (ptrdiff_t i = 0; i < n; i++) a[i] = 0; 但是,我不确定这是否正确,似乎应该如此 for (size_t i = 0; i < n; i++) a[i] = 0; 它是否正确? 我知道我们也应该使用类似memset东西,但让我们完全避免这种情况。 我只问这种类型
我知道如果一个指针在C中声明(并且没有初始化),它将指向一个可以包含任何内容的“随机”内存地址。 它实际上指向的地方怎么样? 据推测,这不是真正的随机,因为这将是低效和不合逻辑的。
我在这里做一些愚蠢的事情,我无法确切地指出: void init_data(double **data, int dim_x, int dim_y) { int i,j,k; data = (double **) malloc(sizeof(double) * dim_x); for (k = 0; k < dim_y; k++) { data[k] = (double *) malloc(sizeof(double) * dim_y); } for (i = 0; i < dim_x; i++) { for (j = 0; j < dim_y; j++) { data[i][j] = […]
这个陈述是否有意义,请参阅“ C编程:现代方法”,第269页第2版 正如一维数组的名称可以用作指针一样, 任何数组的名称也可以使用,无论它具有多少维度。 但是,需要注意一些事项。 考虑以下数组: int a[NUM_ROWS][NUM_COLS]; a 不是指向a[0][0];的指针a[0][0]; 相反,它是指向a[0]的指针。 如果我们从C的角度来看它会更有意义,它不是将二维数组视为二维数组,而是将元素视为一维数组的一维数组。 当用作指针时, a具有类型int (*) [NUM_COLS] (指向长度为NUM_COLS的整数数组的NUM_COLS )。 我很困惑,因为当我认为“其元素是一维数组的数组”时,我认为是一个锯齿状数组 ,但这不是这里发生的事情..这更像是一个带指针算术的宏? 这是参考类型系统以及它如何处理多维数组? 任何人都能解释一下吗?