Как я могу передать массив функции, которая не может его изменить? - PullRequest
4 голосов
/ 17 февраля 2020

Я программирую на C и хочу передать массив в функцию; эта функция не может изменять элементы массива. Каков правильный синтаксис для аргументов функции?

void func(const Foo array_in[])

или

void func(Foo const array_in[])

или, может быть, они одинаковы? Спасибо.

Ответы [ 2 ]

5 голосов
/ 17 февраля 2020

Вы должны использовать указатель на константу , чтобы справиться с этим:

#include<stdio.h>

void fun(const int *ptr)//pointer to constant - array boils down to pointer when passed to function
{
    ptr[0]=9;        //ERROR: Read-Only
}

int main(void)
{
    int arr[]={1,2,3,4};

    fun(arr);
    return 0;    
}

ПРИМЕЧАНИЕ. Не путайте его с указателем константы

1 голос
/ 17 февраля 2020

Во-первых, объявления const Foo array_in[] и Foo const array_in[] абсолютно одинаковы в C.

Во-вторых, когда тип параметра функции имеет тип «массив T», он настраивается автоматически на «указатель на тип T». Таким образом, компилятор делает вид, что вы написали:

void func(const Foo *array_in)

или эквивалентно

void func(Foo const *array_in)

Обратите внимание, что и const Foo *array_in, и Foo const *array_in означают одно и то же в C (указатель Const Foo). Однако Foo * const array_in означает что-то другое (постоянный указатель на Foo).

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