Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Объявление (определение) указателя

Читайте также:
  1. Вынесение и объявление решения суда
  2. Объявление
  3. ОБЪЯВЛЕНИЕ
  4. Объявление
  5. Объявление гражданина умершим
  6. Объявление о вакансии, но несколько иное

Синтаксис объявления указателя:

имя_типа_данных * имя указателя;

Например:

int *pi;

int i, * IntPoint=&i; // этот указатель, при определении, сразу же

// инициализирован адресом переменной целого типа i.

char ** cpp; // указатель на указатель на char

char *menu[10]; // массив из 10 указателей на char

Указатели на массивы и функции, к сожалению, требуют более сложной

записи:

int (*vp)[10]; // указатель на массив из 10 целых

int (*fp)(char, char*); // указатель на функцию с параметрами

// char и char*, возвращающую int

Пример

#include <iostream.h>

#include <conio.h>

Void main(void)

{

int m[2][2]={1,2,3,4},(*vp)[2];

vp=m;

cout<<"\n"<<vp[0][1]; // печатается 2

Getch();

}

В данном случае все правильно, поскольку имя массива, как мы увидим в

Дальнейшем, является как бы указателем-константой на первый элемент, а первый элемент - это одномерный массив из двух элементов.

Главная операция над указателями - это косвенное обращение (разименование), то есть обращение к объекту, адрес которого хранит указатель.

Операция разименования “ * “ является префиксной унарной операцией. Например:

char c1 = 'a';

char* p = &c1; // p содержит адрес c1

char c2 = *p; // c2 = 'a'

Переменная, на которую указывает p, - это c1, а значение, которое хранится в c1, равно 'a'. Поэтому присваиваемое c2 значение *p есть 'a'.

Над указателями можно выполнять и некоторые арифметические операции.

Ниже в качестве примера представлена функция, подсчитывающая число

символов в строке, заканчивающейся нулевым символом (который не учитывается):

int strlen(char* p)

{

int i = 0;

while (*p++)

i++;

Return i;

}

Выражения с указателями

Можно присваивать значение одного указателя другому. Однако это возможно только в том случае, если они одинакового типа.

Можно сравнивать указатели одинаковых типов.

С указателями могут быть использованы только операции ++ , -- , + , - . При применении к указателю этих операций, происходит масштабирование размером объекта, на который указывает этот указатель, что условно можно представить так:

тип * ptr;

ptr = ptr + k; //ptr = ptr + k*sizeof(тип);

Указатель на неопределенный тип void

Специальное применение имеют указатели на тип void. Указатель на void

может указывать на объекты данных любого типа. Например:

int i:

void * p;

То можно

p=&i;

Но изменять значения такого указателя нельзя, потому что для компилятора это указатель на неизвестный тип и он не знает, как осуществлять масштабирование.

Например:

p++; // недопустимо

Можно объявить функцию с типом возвращаемого значения как указатель на void. Это возвращаемое значение может быть присвоено указателю на тот тип, который требуется.


Дата добавления: 2015-07-07; просмотров: 127 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Инициализирующие значения будут присваиваться элементам массива в порядке их| Связь указателей и массивов

mybiblioteka.su - 2015-2021 год. (0.006 сек.)