Форум программистов, компьютерный форум CyberForum.ru

Синтаксис - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 94, средняя оценка - 4.65
GFS
 Аватар для GFS
15 / 15 / 1
Регистрация: 07.11.2009
Сообщений: 118
07.10.2010, 22:50     Синтаксис #1
Просмотрел несколько видеоуроков на ютюбе, пользователь использовал строки char s и char *s. Собственно вопрос, в чем различие если имеется символ "*"(это указатель??)). Также хочу спросить про знак " ->" и знак "&"(когда он один стоит - не &&). Спасибо Ах и вот еще std::cout << "HI" и using namespace std; cout << "HI" равносильны?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2010, 22:50     Синтаксис
Посмотрите здесь:

Конструкторы. синтаксис C++
Непонятен синтаксис C++
Синтаксис C++
C++ Синтаксис языка с++
C++ синтаксис в операторах while и do while
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.10.2010, 22:53     Синтаксис #2
GFS, char s - символ
char* s - указатель на символ. А так же строковый литерал.
& - ссылка на переменную или же получение адреса переменной
Alex_Sabaka
 Аватар для Alex_Sabaka
621 / 38 / 9
Регистрация: 28.07.2010
Сообщений: 895
Завершенные тесты: 3
07.10.2010, 22:59     Синтаксис #3
Цитата Сообщение от GFS Посмотреть сообщение
Также хочу спросить про знак " ->" и знак "&"
Что Вы хотите спросить?
Цитата Сообщение от GFS Посмотреть сообщение
Ах и вот еще std::cout << "HI" и using namespace std; cout << "HI" равносильны?
Да, равносильны.
GFS
 Аватар для GFS
15 / 15 / 1
Регистрация: 07.11.2009
Сообщений: 118
07.10.2010, 23:00  [ТС]     Синтаксис #4
"->" что этот значок означает, по запросу в яндексе что-то мура какая-то
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.10.2010, 23:16     Синтаксис #5
GFS, Косвенная адрессация.
Допустим.

C++
1
2
3
4
5
6
7
8
9
10
struct A
{
    int a;
};
 
int main()
{
    A* b;
    b->a;
}
Через точку обращение не пройдет.
asics
07.10.2010, 23:17
  #6

Не по теме:

Цитата Сообщение от GFS Посмотреть сообщение
"->" что этот значок означает, по запросу в яндексе что-то мура какая-то
Юзай гугл

Mencey
 Аватар для Mencey
145 / 92 / 7
Регистрация: 22.07.2010
Сообщений: 424
07.10.2010, 23:34     Синтаксис #7
Из справочника по C:

Указатели.
1.2.4. Указатели
Указатель - это адрес памяти, распределяемой для размещения идентификатора (в качестве идентификатора может выступать имя переменной, массива, структуры, строкового литерала). В том случае, если переменная объявлена как указатель, то она содержит адрес памяти, по которому может находится скалярная величина любого типа. При объявлении переменной типа указатель, необходимо определить тип объекта данных, адрес которых будет содержать переменная, и имя указателя с предшествующей звездочкой (или группой звездочек). Формат объявления указателя:

спецификатор-типа [ модификатор ] * описатель .

Спецификатор-типа задает тип объекта и может быть любого основного типа, типа структуры, смеси (об этом будет сказано ниже). Задавая вместо спецификатора-типа ключевое слово void, можно своеобразным образом отсрочить спецификацию типа, на который ссылается указатель. Переменная, объявляемая как указатель на тип void, может быть использована для ссылки на объект любого типа. Однако для того, чтобы можно было выполнить арифметические и логические операции над указателями или над объектами, на которые они указывают, необходимо при выполнении каждой операции явно определить тип объектов. Такие определения типов может быть выполнено с помощью операции приведения типов.

В качестве модификаторов при объявлении указателя могут выступать ключевые слова const, near, far, huge. Ключевое слово const указывает, что указатель не может быть изменен в программе. Размер переменной объявленной как указатель, зависит от архитектуры компьютера и от используемой модели памяти, для которой будет компилироваться программа. Указатели на различные типы данных не обязательно должны иметь одинаковую длину.

Для модификации размера указателя можно использовать ключевые слова near, far, huge.

Примеры:

unsigned int * a; /* переменная а представляет собой указатель
на тип unsigned int (целые числа без знака) */
double * x; /* переменная х указывает на тип данных с
плавающей точкой удвоенной точности */
char * fuffer ; /* объявляется указатель с именем fuffer
который указывает на переменную типа char */
double nomer;
void *addres;
addres = & nomer;
(double *)addres ++;
/* Переменная addres объявлена как указатель на объект любого типа. Поэтому ей можно присвоить адрес любого объекта (& - операция вычисления адреса). Однако, как было отмечено выше, ни одна арифмитическая операция не может быть выполнена над указателем, пока
не будет явно определен тип данных, на которые он указывает. Это
можно сделать, используя операцию приведения типа (double *) для
преобразования addres к указателю на тип double, а затем увеличение адреса. */
const * dr;
/* Переменная dr объявлена как указатель на константное выражение, т.е. значение указателя может изменяться в процессе выполнения программы, а величина, на которую он указывает, нет. */
unsigned char * const w = &obj.
/* Переменная w объявлена как константный указатель на данные типа char unsigned. Это означает, что на протяжение всей программы
w будет указывать на одну и ту же область памяти. Содержание же
этой области может быть изменено. */


Операции разадресации и адреса
Эти операции используются для работы с переменными типа указатель.

Операция разадресации (*) осуществляет косвенный доступ к адресуемой величине через указатель. Операнд должен быть указателем. Результатом операции является величина, на которую указывает операнд. Типом результата является тип величины, адресуемой указателем. Результат не определен, если указатель содержит недопустимый адрес.

Рассмотрим типичные ситуации, когда указатель содержит недопустимый адрес:

- указатель является нулевым;

- указатель определяет адрес такого объекта, который не является активным в момент ссылки;

- указатель определяет адрес, который не выровнен до типа объекта, на который он указывает;

- указатель определяет адрес, не используемый выполняющейся программой.

Операция адрес (&) дает адрес своего операнда. Операндом может быть любое именуемое выражение. Имя функции или массива также может быть операндом операции "адрес", хотя в этом случае знак операции является лишним, так как имена массивов и функций являются адресами. Результатом операции адрес является указатель на операнд. Тип, адресуемый указателем, является типом операнда.

Операция адрес не может применятся к элементам структуры, являющимися полями битов, и к объектам с классом памяти register.

Примеры:

int t, f=0, * adress;
adress = &t /* переменной adress, объявляемой как
указатель, присваивается адрес переменной t */
* adress =f; /* переменной находящейся по адресу, содержащемуся
в переменной adress, присваивается значение
переменной f, т.е. 0 , что эквивалентно
t=f; т.е. t=0; */


В справочнике советую ещё по юзать раздел "1.7. УКАЗАТЕЛИ И АДРЕСНАЯ АРИФМЕТИКА".
Вобщем полезный справочник советую иметь под рукой.
Вложения
Тип файла: zip c.zip (113.2 Кб, 318 просмотров)
Mencey
 Аватар для Mencey
145 / 92 / 7
Регистрация: 22.07.2010
Сообщений: 424
07.10.2010, 23:47     Синтаксис #8
Насчёт ->.

C
1
2
3
4
5
6
7
8
9
10
11
12
struct S {
  int a;
  int b;
};
 
int main(void)
{
  struct S s, *ps = &s;
  s.a = 10; /* ps.a = 10; - НЕВЕРНО */
  ps->a = 10; /* (*ps).a = 10; тоже самое */
  return 0;
}
Операция ->(стрелка) используется для обращение к эелементам структур и смесей через указатель.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.10.2010, 23:51     Синтаксис #9
Цитата Сообщение от Lavroff Посмотреть сообщение
Через точку обращение не пройдет.
C
1
(*b).a
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.10.2010, 23:53     Синтаксис #10
easybudda, Я имел ввиду напрямую) Без разыменования)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2010, 04:29     Синтаксис
Еще ссылки по теме:

C++ Новый синтаксис using в C++11
C++ синтаксис
Неправильный синтаксис? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.10.2010, 04:29     Синтаксис #11
Цитата Сообщение от Lavroff Посмотреть сообщение
char* s - указатель на символ. А так же строковый литерал.
& - ссылка на переменную или же получение адреса переменной
char *s; - переменная, которая может хранить адрес какого-нибудь символа
символ находится в памяти, а память пронумерована
поэтому неважно, где он находится, в строковом литерале, или в строковом массиве, или вообще в переменной, которая является одним символом
главное, что в переменную s можно записать адрес, и можно его перезаписать каким нибудь новым адресом

пример

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main(void)
{
    char *p;
    
    p = "abcde";
    
    while (*p != '\0') {
        printf("%c\n", *p);
        p++;
    }
    
    printf("%d" "\n", *p);
    
    printf("%p" "\n", p);
    
    return 0;
}
Код
[guest@localhost tests]$ ./t
a
b
c
d
e
0
0x80484b5
[guest@localhost tests]$


а операция & может быть операцией взятия адреса, а может быть операцией побитового умножения (побитовое И)

в C++ операция & получает ещё одно обозначение к этим двум
Yandex
Объявления
08.10.2010, 04:29     Синтаксис
Ответ Создать тему
Опции темы

Текущее время: 21:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru