Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 94, средняя оценка - 4.65
GFS
16 / 16 / 1
Регистрация: 07.11.2009
Сообщений: 118
#1

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

07.10.2010, 22:50. Просмотров 12158. Ответов 10
Метки нет (Все метки)

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

синтаксис - C++
Только начали изучать С++. До этого писали на Pascal в Lazarus и Delphi. Подскажите, пожалуйста, как правильно задать промежуток в C++,...

Синтаксис - C++
Кусок кода на C++. Помогите разобраться что означает в данном случае последовательность символов &quot;|=&quot; ? UDF_RC CForm1Class::CForm1(...

Синтаксис - C++
int x = 5; 0 = x+x; Что это такое и почему после этого x равно 10 ? Не понимаю вообще записи. Даже если предположить что x == 0...

Синтаксис в c++ - C++
Для чего в описание класса используется &quot;:: &quot;?

Синтаксис в операторах while и do while - C++
Всем драсте потихоньку балуюсь с++ мозг плавится слишком уж придирчивый язык к синтаксису,выкладываю мою писанину, вопрос собственно по...

Про синтаксис using - C++
Доброе время суток Часто встречаю такую конструкцию: #include &lt;iostream&gt; using std::cout; using std::cin; #include &lt;string&gt;...

10
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
07.10.2010, 22:53 #2
GFS, char s - символ
char* s - указатель на символ. А так же строковый литерал.
& - ссылка на переменную или же получение адреса переменной
1
Alex_Sabaka
624 / 485 / 10
Регистрация: 28.07.2010
Сообщений: 895
Завершенные тесты: 3
07.10.2010, 22:59 #3
Цитата Сообщение от GFS Посмотреть сообщение
Также хочу спросить про знак " ->" и знак "&"
Что Вы хотите спросить?
Цитата Сообщение от GFS Посмотреть сообщение
Ах и вот еще std::cout << "HI" и using namespace std; cout << "HI" равносильны?
Да, равносильны.
1
GFS
16 / 16 / 1
Регистрация: 07.11.2009
Сообщений: 118
07.10.2010, 23:00  [ТС] #4
"->" что этот значок означает, по запросу в яндексе что-то мура какая-то
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 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;
}
Через точку обращение не пройдет.
1
asics
07.10.2010, 23:17
  #6

Не по теме:

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

0
Mencey
147 / 94 / 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. УКАЗАТЕЛИ И АДРЕСНАЯ АРИФМЕТИКА".
Вобщем полезный справочник советую иметь под рукой.
1
Вложения
Тип файла: zip c.zip (113.2 Кб, 320 просмотров)
Mencey
147 / 94 / 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;
}
Операция ->(стрелка) используется для обращение к эелементам структур и смесей через указатель.
1
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
07.10.2010, 23:51 #9
Цитата Сообщение от Lavroff Посмотреть сообщение
Через точку обращение не пройдет.
C
1
(*b).a
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
07.10.2010, 23:53 #10
easybudda, Я имел ввиду напрямую) Без разыменования)
0
accept
4825 / 3246 / 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++ операция & получает ещё одно обозначение к этим двум
1
08.10.2010, 04:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2010, 04:29
Привет! Вот еще темы с ответами:

Непонятный синтаксис. - C++
В VC 2010 вместо int main(int argc, char *argv) написано int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpcmdline,...

Синтаксис и библиотеки C++ - C++
1. Что бы вы исправили в синтаксисе с++ 2. Что бы вы исправили в стандартной библиотеке языка с++. Задали вот эти вопросы. А так как...

Непонятен синтаксис - C++
Доброго времени суток! Хотелось бы попросить вашего совета. код double **E = new double *; в данном отрывке...

Синтаксис языка с++ - C++
указать порядок вычислений и расставить скобки если нужно: х=7, b=5, c=7, d=2 1) a=b+c*d&lt;&lt;2&amp;8 2) a&amp;077!=3 3)...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru