РЕДАКТИРОВАТЬ: Большое спасибо за ваши ответы. Теперь я правильно понимаю!
Я пытаюсь узнать больше о 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?
}