Как я могу получить копирование при записи для работы с общей памятью в Linux

В C, когда вы использовали имя массива в выражении (включая передачу его функции), если он не является операндом оператора адреса (&) или оператора sizeof, он распаковывает на указатель на его первый элемент.

То есть, в большинстве контекстов array эквивалентно &array[0] как для типа, так и для значения.

] В вашем примере my_array имеет тип char[100], который распадается на char*, когда вы передаете его в printf.

&my_array имеет тип char (*)[100] (указатель на массив из 100 char ]). Поскольку это операнд &, это один из случаев, когда my_array не сразу разлагается на указатель на его первый элемент.

Указатель на массив имеет одинаковое значение адреса как указатель на первый элемент массива, поскольку объект массива является просто непрерывной последовательностью его элементов, но указатель на массив имеет другой тип для указателя на элемент этого массива. Это важно, когда вы выполняете арифметику указателя на двух типах указателя.

pointer_to_array имеет тип char * - инициализируется для указания на первый элемент массива, поскольку это то, что my_array распадается на в выражении инициализатора - и &pointer_to_array имеет тип char ** (указатель на указатель на char).

Из них: my_array (после распада на char*), &my_array и pointer_to_array все указывают непосредственно на массив или первый элемент массива и поэтому имеют одинаковое значение адреса.

7
задан Community 23 May 2017 в 12:31
поделиться