Рубрики

Составные литералы в Си

Рассмотрим программу ниже на C.

// Пожалуйста, убедитесь, что вы скомпилировали эту программу
// используя компилятор C, а не компилятор C ++ (сохраните
// файл .cpp). Если вы используете онлайн-компилятор, выберите «C»
#include <stdio.h>

int main()

{

   // Составной литерал (массив создается без

   // назначено любое имя и адрес первого элемента

   // верх. Это эквивалентно:

   // int arr [] = {2, 4, 6};

   // int * p = arr;

   int *p = (int []){2, 4, 6};

  

   printf("%d %d %d", p[0], p[1], p[2]);

  

   return 0;

}

Выход:

2 4 6

Приведенный выше пример является примером составных литералов. Составные литералы были введены в C99 стандарт C. Функция составных литералов позволяет нам создавать безымянные объекты с заданным списком инициализированных значений. В приведенном выше примере массив создается без имени. Адрес первого элемента массива присваивается указателю p.

Какая польза от этого?
Составные литералы в основном используются со структурами и особенно полезны при передаче структурных переменных в функции. Мы можем передать объект структуры, не определяя его
Например, рассмотрим приведенный ниже код.

// Пожалуйста, убедитесь, что вы скомпилировали эту программу
// используя компилятор C, а не компилятор C ++ (сохраните
// файл .cpp). Если вы используете онлайн-компилятор, выберите «C»
#include <stdio.h>

  
// Структура для представления 2D-точки

struct Point

{

   int x, y;

};

  
// Сервисная функция для печати точки

void printPoint(struct Point p)

{

   printf("%d, %d", p.x, p.y);

}

  

int main()

{

   // Вызов printPoint () без создания каких-либо временных

   // Точечная переменная в main ()

   printPoint((struct Point){2, 3});

  

   / * Без составного литерала вышеприведенное утверждение будет иметь

       был написан как

       struct Point temp = {2, 3};

       printPoint (температура); * /

  

   return 0;

}

Выход:

2, 3

Эта статья пополняемые Шивов Гупт. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Составные литералы в Си

0.00 (0%) 0 votes