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

Feb 24, 2004 6 Replies

Hi All!



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


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

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


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


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



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


Всем привет!

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

Привет 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';

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

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

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

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.

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> перевод... ;)

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

Георгий

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required