СИМВОЛЬНЫЕ СТРОКИ И ФУНКЦИИ НАД СТРОКАМИ
Всякий раз, когда компилятор встречается с чем-то заключённым в кавычки, он определяет это как строковую константу. Символы+'\0' записыватся в последовательные ячейки памяти. Если необходимо включить кавычки в символьную строку, нужно поставить впереди \".
Строковые константы размещаются в области данных. Вся фраза в кавыч-ках является указателем на место в памяти, где записана строка. Это аналогично имени массива, служащего указателем на адрес расположения массива. Для вывода символьной константы служит идентификатор %s.
char mas[] = "Это одна строка";
mas - адрес строки -> &m[0] *mas=='Э'.
Можно использовать указатель для создания строки.
char *str = "Таблица результатов";
char str[]= "Таблица результатов".
Сама строка размещается в области данных, а указатель инициализируется адресом.
void main(void){
char* mesg="Ошибка чтения";
char* copy;
copy = mesg; создается второй указатель на строку.
printf ("%S", copy);
printf ("%S", mesg);
}
char* name;
scanf ("%S", name); //Так нельзя !!! Будет запорчена память.
char name [81]; //Нужно в начале определить массив
Массивы символьных строк
1. Строки в символьный массив можно вводить с клавиатуры.
char mas[80+1];
scanf("%S",mas);
Если требуется несколько строк, то организуем цикл ввода
char mas[4][81];
for (i=0; i<4; i++)
sсanf("%S", mas[i]); // &mas[i][0]
2. Можно сразу инициализировать в программе.
char m1[] = "Только одна строка"; - автоматически определяется
длина строки + 1 байт на '\0'.
Размер массива можно задать явно.
char m2[50] = "Только одна строка"; //18+1
char m3[]={'c', 'm', 'p', 'o', 'k', 'a', '\o'};
char masstr[3][16]={"Первая строка",
"Вторая строка",
"Третья строка" };
*masstr[0]=='П';
*masstr[1]=='B';
*masstr[2]=='Т';
static char *masstr[3]= {"Первая строка",
"Вторая строка",
"Третья строка" };
Однако в этом случае организуется рваный массив. Длина строк разная и зря не расходуется память.
Массивы указателей
Можно определять массивы указателей
int* parray[5]; //5 указателей на целые значения.
*parray[3] - //3-й элемент массива.
char *keywords[5]={"ADD", "CHANGE", "DELETE", "LIST", "QUIT"};
В памяти
keyword[0] – адрес 10000 строка ADD\0 4б
keyword[1] - 10004 CHANGE\0 7б
keyword[2] - 10011 DELETE\0 7б
for (i=0; i<5; i++)
printf("%S", keywords[i]);
char *key[3],**pt; //определение указателя на указатель
pt=key;
printf(«%s %d\n»,*pt,**pt); //распечатывается первая строка и код первой буквы
Указатель как возвращаемое значение функции
Дата добавления: 2016-02-02; просмотров: 790;