【发布时间】:2011-08-04 02:01:59
【问题描述】:
编辑:非常感谢您的回复。我现在明白了!
我正在尝试了解更多关于 C 指针的信息。修补一下,我在质疑我正在使用的两个动作之间的区别。
此代码乍一看似乎可以工作,但我不确定有什么区别,以及这两种方法中的任何一种是否在某些方面是错误的。
我想知道这两段代码有什么区别,什么时候应该传递地址,什么时候传递指向数组的指针?
有错吗?如果是这样,正确的方法是什么?
有一个简单的结构网格,很像 struct grid { int val; }(用于演示目的)
第一段代码。将指针的地址传递给数组。
void set (mygrid *grid, int foo){
grid->bar = foo; //should this be '*grid->bar?' But this seems to work properly.
}
void main(){
int i;
int* array;
int max = 24;
array = malloc(sizeof(grid) * max);
for(i = 0; i < max; i++){
set(&array[i], 0);
}
}
第二段代码。我不完全确定为什么会这样,但是编译器没有输出任何警告。 我应该像这样将指针传递给数组的开头?
void set(mygrid *grid, int foo){
int i; int max = 24; //so this example code compiles :P
for(i = 0; i < max; i++){
grid[i].bar = foo;
}
}
void main(){
int* array;
int max = 24;
array = malloc(sizeof(grid) * max);
set(array, 0); //Why not &array?
}
【问题讨论】:
-
当心那个 malloc 的参数。它应该是
malloc(sizeof(mygrid)*max)。我知道它有效,因为mygrid正好是一整型,但它“闻起来”而且感觉很糟糕 :) -
哎呀!视力好。一开始我想做一个整数数组,但后来我想起了具体的例子使用了一个结构数组。以防万一它有所作为。然后我忘了编辑那个 malloc :P