Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Символьные данные и строки




Указатель на void

 

Например:

 

void* pv; // указатель на объект произвольного типа

int g(void); // функция без аргументов, равносильно int g();

void f(); // f не возвращает значения

 

Указатель void* может указывать на объект любого типа, если этот объект объявлен без спецификаторов const или volatile.

 

Например:

void* malloc(unsigned size); // библиотечная функция –

// аналог оператора new в языке C

void free(void*); //библиотечная функция –

//аналог оператора delete в языке C

void f() // распределение памяти в стиле языка C

{

int* pi = (int*)malloc(10*sizeof(int));

char* pc = (char*)malloc(10);

//...

free(pi);

free(pc);

}

В программе синтаксис: (тип) выражение - используется для задания операции преобразования выражения к другому типу. Следовательно, перед присваиванием pi тип void*, возвращаемый в первом вызове malloc(), преобразуется к типу int.

 

 

Для символьных данных в С++ введен тип char.

Описание символьных переменных:

char список_имен_переменных;

Пример 63

const char c=’c’; /*символ – занимает один байт, его значение не меняется*/

char a,b; /*символьные переменные, занимают по одному байту, значения меняются*/

const char *s=“Пример строки\n“; //текстовая константа

 

Строка – это последовательность символов, заключенная в двойные кавычки (" ").

Размещая строку в памяти, транслятор автоматически добавляет в ее конце символ '\0' (нулевой символ или нулевой байт, который является признаком конца строки). В записи строки может быть и один символ: "А" (заключен в двойные кавычки), однако, в отличие от символьной константы 'А' (используются апострофы), длина строки "А" равна 2 байтам.

В языке С++ строка – это пронумерованная последовательность символов (массив символов), она всегда имеет тип char[]. Все символы строки нумеруются, начиная с нуля. Символ конца строки также нумеруется – ему соответствует наибольший из номеров.

Количество элементов в таком массиве на 1 больше, чем изображение соответствующей строки, так как в конец строки добавлен нулевой символ '\0' (рис. 7.1).

 


Рис. 7.1. Представление строки и символа

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

char s1[] = "ABCDEF"; //инициализация строки

char s2[]={'A','B','C','D','E','F','\0'};//инициализация строки

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

Пример 64 Определение размера строк

#include "stdafx.h"

#include <iostream>

using namespace std;

int main()

{

char s1[10]="string1";

int k=sizeof(s1);

cout<<s1<<"\t"<<k<<"\n";

char s2[]="string2";

k=sizeof(s2);

cout<<s2<<"\t"<<k<<"\n";

char s3[]={'s','t','r','i','n','g','3','\0'}; /*окончание строки '\0' следует соблюдать, формируя в программах строки из отдельных символов*/

k=sizeof(s3);

cout<<s3<<"\t"<<k<<"\n";

char *s4="string4"; //указатель на строку, ее нельзя изменить

k=sizeof(s4);

cout<<s4<<"\t"<<k<<"\n";

system("pause");

return 0;

}

Результат выполнения программы:

string1 10 – выделено 10 байтов, в том числе под '\0'

string2 8 – выделено 8 байтов (7 + 1 байт под '\0')

string3 8 – выделено 8 байтов (7 + 1 байт под '\0')

string4 4 – размер указателя

 

 




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 420; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.