вопросы по синтаксу С

Hi All!

всю жизнь писал на паскале для PC, для микроконтроллеров - на асме. теперь вот на С перехожу (IAR 2.28), книжки под рукой нет. возникло несколько вопросов, подскажите пожалуйста:

1) как объявить следующее: переменная а типа "слово", p - указатель на нее. int a; int* p=<?>;

потом как я понимаю *p++ - операция со значением в памяти, а р++ - с самим указателем. верно?

2) как указать ширину поля в формате вывода для десятичных чисел? пробовал так: printf("%4d",99); выводит "4d". с вариантами printf игрался, результат от выбора не зависел :-/

3) в каких случаях используется значок "->"?

Всего доброго.

Reply to
Andrey Tischenko
Loading thread data ...

Всем привет!

Andrey Tischenko писал к All 24.02.2004:

AT> всю жизнь писал на паскале для PC, для микроконтроллеров - на асме. AT> теперь вот на С перехожу (IAR 2.28), книжки под рукой нет. возникло AT> несколько вопросов, подскажите пожалуйста:

Я конечно извиняюсь, но в магазин за книжкой сходить или из интернета скачать - не судьба?

AT> 1) как объявить следующее: переменная а типа "слово",

нет такого типа

AT> p - указатель на нее.

AT> int a; AT> int* p=<?>;

int* p=&a;

AT> потом как я понимаю *p++ - операция со значением в памяти, а р++ - с AT> самим указателем. верно?

нет ++ в любом случае применяется к указателю, а вот значение выражения в первом случае данные по адресу из p, а во втором - сам p.

AT> 2) как указать ширину поля в формате вывода для десятичных чисел? AT> пробовал так: printf("%4d",99); AT> выводит "4d". с вариантами printf игрался, результат от выбора не AT> зависел :-/

плохо игрался. Используй нормальную, а не урезанную, версию printf.

AT> 3) в каких случаях используется значок "->"?

в тех случаях, когда это требуется. Что тут еще можно сказать? RTFM

Reply to
Askold Volkov

Привет Andrey!

24 Feb 04 19:13, Andrey Tischenko писал All:

AT> всю жизнь писал на паскале для PC, для микроконтроллеров - на асме. AT> теперь вот на С перехожу (IAR 2.28), книжки под рукой нет.

Это плохо. Все-таки возьми где-нибудь стандарт ISO и держи его под рукой.

AT> возникло несколько вопросов, подскажите пожалуйста:

AT> 1) как объявить следующее: переменная а типа "слово",

Hет такого типа. Переменная типа int может иметь разный размер.

AT> p - указатель на AT> нее. AT> int a; int* p=<?>;

int a; int* p = &a;

AT> потом как я понимаю *p++ - операция со значением в памяти, а р++ - с AT> самим указателем. верно?

Hет. Приоритет оператора ++ выше, чем унарного *, поэтому выражение *p++ равносильно *(p++).

AT> 2) как указать ширину поля в формате вывода для десятичных чисел? AT> пробовал так: printf("%4d",99); выводит "4d".

Формат у тебя правильный, видимо, библиотека испорченная.

AT> с вариантами printf игрался, результат от выбора не зависел :-/

AT> 3) в каких случаях используется значок "->"?

Обращение к полям структуры по указателю на нее:

struct ss { int aaa; char c; };

struct ss var; struct ss* ptr;

var.aaa = 10; ptr = &var; ptr->c = 'A';

Алексей М. ... Владею дыроколом на уровне пользователя.

Reply to
Alex Mogilnikov

AT> 1) как объявить следующее: переменная а типа "слово", p - указатель на AT> нее. AT> int a; AT> int* p=<?>;

Второй раз советую: разыщите в интернете программы cdecl и cundecl. Очень помогают, когда вы не можете понять что означать какое-либо объявление переменной в C, или же наоборот, не можете составить сложное выражение объявляющее переменную:

sysop@pc:sysop$ cundecl declare p as pointer to int; -- мой ввод int *p; -- это ответ

AT> потом как я понимаю *p++ - операция со значением в памяти, а р++ - с самим AT> указателем. верно?

В любой порядочной книге есть таблица с приоритетами операций. Операция обращения по адресу имеет более высокий приоритет.

AT> 2) как указать ширину поля в формате вывода для десятичных чисел? пробовал AT> так: AT> printf("%4d",99); AT> выводит "4d". с вариантами printf игрался, результат от выбора не зависел AT> :-/

HЕ HАДО СПРАШИВАТЬ В ЭХОКОHФЕРЕHЦИИ. Обратитесь к документации! Просто потому, что дать исчерпывающий и точный ответ на ваш вопрос вы не получите, а не обладая полной информацией очень легко наделать ошибок. Специально выделяю: HЕ К КHИГЕ, А К ДОКУМЕHТАЦИИ. Что касается библиотечных функций

-- только к документации. Потому как их поведение зависит от используемой вами библиотеки и варьируется в разных системах. Так например printf входящий в состав GNU libc вводит свои нестандартные расширения. Особенно, что касается "embedded" -- отклонения от стандартов тут запросто возможны.

Что касается стандартных библиотек и самого языка, вы должны иметь документ ISO/IEC 9899:1999 -- последний стандарт, так называемый "C99".

AT> 3) в каких случаях используется значок "->"?

Обращение к элементу структуры по указателю. Выражение "x->y" полностью эквиэвалентно выражению "(*x)->y". Точно также, как выражение "(&z)->y" полностью эквиэвалентно "z.y". В данном случае подразумевается, что:

struct S { anytype y; }; // структура S содержит элемент y struct S *x; // x -- указатель на структуру S struct S z; // z -- содержит структуру S

Reply to
Kirill Frolov

KF> Обращение к элементу структуры по указателю. Выражение "x->y" KF> полностью эквиэвалентно выражению "(*x)->y". Точно также, как выражение ^^^^^^^^^ Следует читать: "(*x).y".

Reply to
Kirill Frolov

Hello Kirill.

Wed Feb 25 2004 12:40, Kirill Frolov wrote to Andrey Tischenko:

AT>> 1) как объявить следующее: переменная а типа "слово", p - указатель на AT>> нее. int a; int* p=<?>;

KF> Второй раз советую: разыщите в интернете программы cdecl и cundecl. KF> Очень помогают, когда вы не можете понять что означать какое-либо KF> объявление переменной в C, или же наоборот, не можете составить сложное KF> выражение объявляющее переменную

О какой классный синтаксис у сишных объявлений, что требуется перевод... ;)

Dimmy.

Reply to
Dimmy Timchenko

Dimmy, ты ещё здесь сидишь?

Воскресенье Февраль 29 2004 12:29, Dimmy Timchenko wrote to Kirill Frolov:

AT>>> 1) как объявить следующее: переменная а типа "слово", p - AT>>> указатель на нее. int a; int* p=<?>; KF>> Второй раз советую: разыщите в интернете программы cdecl и KF>> cundecl. Очень помогают, когда вы не можете понять что означать KF>> какое-либо объявление переменной в C, или же наоборот, не можете KF>> составить сложное выражение объявляющее переменную DT> О какой классный синтаксис у сишных объявлений, что требуется DT> перевод... ;)

С "птичьего" на человечий и обратно :-/

Георгий

Reply to
George Shepelev

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.