Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры прога 2.docx
Скачиваний:
1
Добавлен:
18.09.2019
Размер:
83.31 Кб
Скачать

32.Массивы указателей. Указатели на указатели.

Элементами массива могут быть и указатели. Имя массива – это указатель на его первый элемент, поэтому имя массива указателей- это указатель на указатели.

Можно описать и переменную, являющуюся указателем на указатели. Признаком такого объявления является число повторения символов *. Число * показывает уровень указателя. Фактически, указатель на указатель- это ячейка памяти, содержащая адрес указателя. Размер области памяти, выделяемый под эту переменную равен 2-4Б. При объявлении указатель на указатель можно инициализировать.

Пр: int data =5; //переменная целого типа

int *ptr=&data; //указатель на объект целого типа

int **ptr1=&ptr; //указатель на указатель

int ***ptr2=&ptr1; //указатель на указатель

Для доступа к соответствующим элементам можно использовать и индексы

Пр: int a[]={11,12,13,14,15};

int *p[]={a,a+1,a+2,a+3,a+4};

int **pp=p;

33.Массивы указателей на строки.

Объявление:

char *mes[]={“Не открыт файл”,”Ошибка ввода”,”Диск”,”Пауза”};

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

char arr[][16]={“Не открыт файл”,”Ошибка ввода”,”Диск”,”Пауза”};

При компиляции программы, содержащей объявления mes и arr, их внутреннее представление в памяти будет иметь следующий вид:

4*2+39*1=47(байт) для mes и 4*8*2=64(байта) для arr

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

34.1,Передача параметров из операционной среды.

Иногда возникает необходимость передавать в программу информацию при её вызове. Основной метод состоит в использовании аргументов командной строки операционной системы. В этом случае функция main() должна быть определена с параметром или аргументом. Первые два параметра:

argc ( argument count )

argv ( argument vector )

Параметр argc определяет количество аргументов командной строки и является параметром типа int. Он всегда не меньше 1, так как имя программы, вызываемой для выполнения, трактуется как первый параметр.

Параметр argv является массивом указателей, каждый элемент которого ссылается на строковое представление аргумента командной строки, передаваемого функцией main(). Функции main() может пердаваться третий параметр envp, который также является массивом указателей на строковые величины, определяющие операционную систему.

main(int argc,char *argv[],char *envp[]) или main(int argc,char **argv,char **envp)

argv[0] всегда содержит имя вызываемой программы, поэтому значение argc на 1 превышает количество передаваемых параметров. Остальные аргументы массива argv указывает на аргументы командной строки, разделяемых пробелами или табуляциями. Если аргументом является число, то оно рассматривается как строка символов.

#include <stdio.h>

#include <stdlib.h>

main(int argc, char *argv[])

{if (argc<2 ) {printf(“Вы забыли набрать имя\n”);exit(0);}

pintf(“Hello!%s!\n”, argv[1]);}

Если ввести: >name.exe Василий

то получим Hello!Василий!

Общая длина строки, на которую указывает элемент argv или envp, не должна превышать 128 символов.