конвертировать массив int в указатель на C - PullRequest
2 голосов
/ 15 марта 2011
void test()
{
       int buf[1000];

       //populate buf
       foo(buf);//is this correct? Can we pass buf as a pointer that foo expects?



}
void foo(void*ptr)
{}

РЕДАКТИРОВАТЬ: если foo был бы fwrite, будет ли все же применяться описанный выше (механизм передачи буфера, чтобы обеспечить fwrite содержимым для записи в некоторый файл)?

Ответы [ 5 ]

2 голосов
/ 15 марта 2011

Это абсолютно допустимый аргумент C. foo - указатель, который может указывать на любого типа .Когда вы передаете массив, он распадается на указатель, указывающий на первый элемент массива (т. Е. Передается адресное местоположение первого элемента).Итак,

 ptr -> &buf[0] ;
1 голос
/ 15 марта 2011

Как указывали другие ответы, да , вы можете передать buf функции.

Однако внутри функции переменная ptr имеет тип void*,И есть только несколько вещей, которые вы можете сделать с самим ptr.Обычно вы конвертируете это (с или без приведения) во что-то релевантное, например int*.

void foo(void *ptr) {
    int *iptr;
    iptr = ptr;
    /* now use iptr */
}
1 голос
/ 15 марта 2011

Да, это правильно.Вы можете использовать указатель «ptr» в вашей функции foo.http://codepad.org/HwYd0GAh

1 голос
/ 15 марта 2011

Да, вы всегда будете передавать buf в качестве указателя.

1 голос
/ 15 марта 2011

Да, вы можете сделать это.

buf - базовый указатель массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...