编辑:非常感谢您的回复。我现在明白了这一点!为什么这个C代码有效?
我想了解更多关于C指针。摆弄,我在质疑我正在使用的两个动作之间的差异。
该代码似乎乍一看起来很有效,但我不确定它们之间有什么区别,以及这两种方法中的任何一种在某种程度上是否是错误的。
我想知道两段代码之间有什么区别,何时应该通过地址,何时指向数组?
是否有任何错误?如果是这样,那么正确的方法是什么?
有一个简单的结构网格很像结构网格{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'只是一个int long,但它“闻起来”,感觉不好:) –
哎呀!好视力。我一开始想做一系列的整数,但后来我记得具体的例子使用了一系列结构。以防万一它有所作为。然后我忘了编辑该malloc回来:P –