Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Предопределённые идентификаторы.

Поиск

_ _cplusplus - исходный текст должен компилироваться как C++, а не C

_ _ DATE_ _ - во время компиляции преобразовывается в строку, заключая в кавычки, содержащую дату компиляции.

_ _FILE_ _ - вместо FILE подставляется строчка с именем файла, с учётом полного пути

_ _LINE_ _ - содержит в себе номер текущей строки

_ _TIME_ _ - время последней компиляции

cout << “Error in”<<_ _FILE_ _ #define

<<”str”<<_ _LINE_ _<<

<<”cur time”<<_TIME_;

Диагностический макрос (микрокоманда) assert.

 Макрос assert имеет вид: assert (выражение)

 Позволяет программисту отследить не предусмотренные задачей ситуации во время выполнения программы.

assert (x<0)

assertion failed: x<0; file…;

line…….;

2. #undef – отмена использования #define

#define MESSAGE “hello”

    cout<<MESSAGE;

#undef MESSAGE

    cout<<MESSAGE; // выдаст ошибку

#ifdef MESSAGE

#else

#define MESSAGE “hello”

#endif

#if defined(_Win32)

    typedef ind int 32;

#else

    typedef long int 32;

#endif

    int 32 m=1; // 32 разряда

3. #include – получаем доступ к стандартной библиотеке

 

#include

std lib                         user files

         general.h          general.cpp              func1.cpp              func2.cpp

#include “general.h” #include “general.cpp” #include “func1.cpp” #include “func2.cpp”

 

Указатели.

  Указатель – переменная, содержащая адрес другого объекта си программы.

 Если переменная содержит адрес некоторого другого объекта, то говорят, что переменная указывает на этот объект.

Виды указателей

на объект                  на функции       

                               -указатели

                               -базовые типы

                               -на массивы

                               -struct, union, class…

int * pn; //объявим указатель на тип данных int

int *pn;   то же

int* pn;   самое

 

Замечание:

1.  Объектом, на которые указывают указатели, может быть как одиночная переменная базового типа, так и первый элемент одномерного массива.

2.  При представлении выше объявления указателя, выделяется память для переменной типа указателя. Но сам указатель пока никуда не указывает. Рекомендуется проводить инициализацию указателя во время объявления.

int a;

int b=10;

 В зависимости от контекста объявления память под указатель компилятор может выделить: в стеке (локальная переменная), в статической области данных (глобальная или статическая), heap (динамически независима от того, где находится сам объект).

int *p; //глобальная

{

  int * p1; //локальная

  static int * p2; //статическая

}

Инициализация указателя и оператор получения адреса объекта.

 

& - амперсант

 Чтобы провести явную инициализацию указателя:

int n=1;

int *pn=&n;

int a[100];

int *pa=&a;

char *pstr=”string”;

char *pstr=&”string”;

 

Арифметика указателей.

 

int * p2;

p2=pn;

pn++;

pn=pn+sizeof(int);

p2=pn+5;

p2=pn+5*sizeof(int)

if (pn==p2)

 Существует вид указателя на объекты любого типа:

void *;

void * pvoid;

int n;

char c;

int * pn;

pvoid=&h; // OK

pvoid=&c; //OK

pvoid=pn; //OK

reinterpret_cast

double d=99.99;

int n=d; //d=99

int n=0x12345;

char c=n;

int *pn=&n;

char *pc=reinterpret_cast

<char*> (&n);

Массивы.

 

Свойства массивов:

1. В памяти расположена совокупность упорядоченных элементов данных (последовательно).

2. Данные должны быть одного и того же типа.

3. Данные занимают непрерывно линейную область памяти.

4. Каждый массив имеет имя (оно является константным указателем, равным адресу начала массива, нулевого байта, нулевого элемента массива). Тип такого указателя зависит от размерности массива.

5. Доступ к отдельным элементам массива может осуществляться по имени массива и индексу (порядковый №) элемента или с помощью оператора <<*>> разыменовывания.



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 42; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.151.112 (0.006 с.)