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

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
    Hi All!

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

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

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

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

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

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


Re: вопросы по синтаксу С
    Всем привет!

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

--
Аскольд Волков, Новосибирск. http://www.inp.nsk.su/~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';

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

Re: вопросы по синтаксу С
Hемедленно нажми на RESET, Andrey Tischenko!


 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



Re: вопросы по синтаксу С
Hемедленно нажми на RESET, Kirill Frolov!


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

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



                                                   Георгий


Site Timeline