Задать вопрос
@n_angelo
IT's OK

Чем отличается обявление int* a от int *a в Си?

Синтаксис и так запутанный, для чего такие различия в объявлении, если результат один и тот же?
/* main.c */
#include "stdio.h"

int a = 10;
int b = 20;

int *a_ptr = &a;
int* b_ptr = &b;

int main (void)
{
    printf("%d\n", *a_ptr);  //10
    printf("%d\n", *b_ptr);  //20
    return 0;
}
  • Вопрос задан
  • 3542 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега C
Седой и строгий
Ни чем не отличается. Пробельные символы допустимо ставить в любом месте, где они не разрывают ключевое слово, идентификатор или константу. Все варианты ниже полностью эквивалентны:
int*a;
int* a;
int *a;
int * a;

Но есть некоторая тонкость. Если посмотреть на синтаксис объявления нескольких переменных:
int * a, * b, c, * d, e; // a, b и d - указатели, c и e - числа

то будет видно, что "звездочка" является скорее модификатором переменной, чем модификатором типа. Чтобы подчеркнуть этот факт, рекомендуется всегда писать "звездочку" около переменной. Такая привычка позволяет избежать глупых ошибок:
int *a, *b; // нормально
int* a, b;  // Ошибка: b кажется указателем, но на самом деле - число.

А синтаксис у C простой.
5c77e725c3f4a317612433.jpeg
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BacCM
@BacCM
C++ почти с рождения
В С как и большинстве языков, пробелы в коде можно игнорировать. Они являются просто одним из разделителей лексем. Притом некоторые лексемы разделяются и без разделителей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы