Алфавит языка Си Спецификаторы доступа: строчные и заглавные:

advertisement
1
Алфавит языка Си включает:
1. Буквы латинского алфавита,
строчные и заглавные:
a - z, A - Z;
2. Цифры 0 - 9;
3. Символы + - / * = % & .
, ; " ' ( ) [ ] { } |
\ < > ? : ! _ ~ ^
Спецификаторы доступа:
private protected public
Идентификаторы
- допустимые символы a - z, A Z, цифры 0 - 9, _(подчеркивание);
- 1-й символ не может быть
цифрой;
enum Seasons
{ winter,spring,summer,autumn }
s1,s2,s3;
name1
NAME1
Total_5
_alpha
Разделители
пробел ; , * = ( ) [ ] { } :
...
& (в препроцессоре # < >)
Прочие:
asm case default _cs _ds _es _ss
template this namespace using
Перечисления
Имена в Seasons – целые
константы
winter=0, spring=1 и т.д.
enum days
{ Su=5,Mo,Tu,We=11,Th,Fr,Sa };
Константы
Ключевые слова, недопустимые в
качестве идентификаторов:
Спецификаторы типов:
bool char int float double void
Модификаторы типов:
long short signed unsigned
const volatile typedef cdecl
near far huge interrupt pascal
Теги интегральных типов:
enum class struct union
Спецификаторы классов памяти:
auto extern static register
Операторы языка:
break if else for goto do while
switch return try catch throw
continue
Операции языка:
sizeof new delete typeid
десятичные:
цифры 0 - 9, первой цифрой не
должен быть 0;
11
155
восьмеричные: 0 - 7,
начинаются с 0;
012=10d
0123=83d
16-ричные:
цифры 0 - 9,
буквы a - f или A - F
начинаются с 0x или 0X
0x12->18d
0X12 0x2f 0XA3->163d
Длинные целые константы
12l
076L
Беззнаковые константы
Модификаторы функций:
friend inline operator overload
virtual
23u
42U
1996ul
2
Константы с плавающей точкой
sizeof
3.14159 100. .152 .152e3=152
sizeof(e) - число байт,требуемых
3096E-5=0.3096
15f
125F
для размещения в памяти объекта
3.1415926l 3e-8L - long double e;
char delta[81];
b=sizeof(delta);
Символьные константы
'А'
'#'
Специальные (управляющие)
символьные константы
\n
перевод строки
\t
горизонтальная табуляция
\v
вертикальная табуляция
\b
забой
\r
возврат каретки
\f
перевод формата (новая
страница)
\a
звуковой сигнал
\'
апостроф
\"
кавычки
\\
обратная косая
\033 байт в 8-ричном
представлении
\x1b
16\?
знак вопроса
\0
нулевой символ
sizeof(тип)- число байт,
требуемых для размещения в
памяти данных, имеющих указанный
в операции тип.
i=sizeof(long);
++
++а - префиксная форма записи;
а++ - постфиксная форма записи.
C++; эквивалентно
a=b*c++;
C=C+1;
a=b*(++c);
(тип) операция преобразования
типа
int n=10;
float alpha,beta=25.5;
alpha=(float)n+beta;
Строковые константы
alpha=float(n)+beta;
"1st string.\n"
"A"
char *vls1="1st very long \
string.";
char vls2[]="2nd very long"
" string.\n";
Составное присваивание
money-=price;
price;
money=money-
ВЫРАЖЕНИЯ И ОПЕРАЦИИ С ДАННЫМИ.
Условная операция
a++;
b=10;
? :
x=(y*z)/w;
ymax=(a>b)?a:b;
a*b/c
a=b=c
->
->
(a*b)/c
a=(b=c)
(p==0)?(p=p+1):(p=p+2);
3
_________________________________
::
Доступ к глобальной
<переменной
::
Указание принадлежности к ->
классу, структуре или
объединению
_________________________________
( )
Вызов функции
->
[ ]
Выбор элемента массива
.
Выбор элемента касса,
структуры или объединения
->
-//-//- ,
адресуемой(го) указателем
_________________________________
sizeof Определение размера
<в байтах
!
Логическое отрицание
~
Побитовое отрицание
+
Подтверждение знака
Изменение знака
++
Увеличение на единицу
-Уменьшение на единицу
&
Определение адреса
*
Обращение по адресу
(тип) Преобразование типа
new
Выделение памяти
delete Освобождение памяти
_________________________________
.*
Выбор элемента класса
->
->*
через указатель
________________________________
*
Умножение
->
/
Деление
%
Деление по модулю
(определение остатка
от деления)
________________________________
+
Сложение
->
Вычитание
________________________________
<<
Сдвиг влево
->
>>
Сдвиг вправо
________________________________
<
Меньше
->
<=
Меньше или равно
>
Больше
>=
Больше или равно
________________________________
==
Сравнение на равенство ->
!=
Сравнение на неравенство
________________________________
&
Побитовая операция И
->
________________________________
^
Побитовая операция
->
исключающее ИЛИ
________________________________
|
Побитовая операция ИЛИ ->
________________________________
&&
Логическая операция И
->
________________________________
||
Логическая операция ИЛИ ->
________________________________
? : Условная операция
<(арифметическое "если")
________________________________
=
Присваивание
<*= /= %= += -=
<<= >>= &= ^= |=
________________________________
,
Операция запятая
->
________________________________
Порядок обработки операндов
&&
||
?:
,
v=(x=5)+(++x);
->
v=11, x=6
->
<x=0, v=6, x=5
x=5; v=x+(x+1); ++x;
Побочные эффекты
add(i+1,i=j+2);
int i,a[10];
i=0;
a[i++]=i;
4
ОПЕРАТОРЫ.
Формат и вложенность
Оператор цикла с предусловием
while (пока)
if, if-else, switch, while, while(выражение)
do-while, for
оператор1;
Оператор выражения
language=C++;
Оператор объявления
int a;
Составной
оператор
{ int i=0; a+=5; i++; }
{
unsigned char k;
k=getch();
printf("%c",k);
}
while(a<=255)
{
y*=x; a++;
}
Оператор цикла с постусловием do
- while (делать, пока)
do
оператор1;
while(выражение)
x=0;
do
s[x]=0;
while(++x<80);
Оператор метки
Оператор пошагового цикла for
begin: a=1;
Оператор условия if else
if(выражение) оператор1;
else оператор2;
if(a>b) { c=1; d=2; }
else {c=2; d=1; }
if(a) b=c;
if(!d) a=1; else if(b>a)
a++;
for(оператор1;выражение1;
выражение2)
оператор2;
for(int i=0,j=n-1;i<n;i++,j--)
a[i]=a[j];
for(i=0;i<10;line[i++]=0);
5
Оператор переключения switch
Первая форма (редкая)
switch(выражение)
case константа1:
case константа2:
...
оператор
- эквивалентна конструкции
if(выражение==константа1
|| выражение==константа2
...)
оператор
за исключением того, что
выражение вычисляется только один
раз.
switch(c)
{
case '+': n=a+b; break;
case '-': n=a-b; break;
case '*': n=a*b; break;
case '/': n=a/b; break;
default: cout<<"Error.";
}
Оператор завершения
break;
for(i=0;i<n;i++)
if((a[i]=(b[i])==0)
break;
Оператор продолжения
switch(n)
case 2: case 4: case 6:
delta=n;
Вторая форма (общая)
switch(выражение)
{
case константа1:
case константа2:
...
операторы
case константа3:
case константа4:
...
операторы
default:
операторы
}
continue;
for(i=0;i<n;i++)
{
if(a[i]!=0)
continue;
a[i]=b[i];
k++;
}
Оператор возврата
return выражение1;
return 1;
return x*x;
return; // для void
6
Указатели
Операции с адресами
y=&x;
int *y;
&(x+7) // ошибка
&28
// ошибка
*y=7;
*x*=5;
(*z)++;
z=*y;
Если y=&x и z=*y то z=x
x - переменная
y – ее адрес (указатель)
z – содержимое адреса y
*y - содержимое адреса y
// *z=5, (*z)++ -> *z=6
*z++;
int *p; //указатель на int
int i=33;
p=&i;
*p=*p+1; //i=34
y++;
y+n
A000
значение x A001 <- Адрес x
NULL
A002
&x
y=&x
Указатели на указатели
*y
y
z=*y // * - указатель
z=*(&x)
z=x
int
int
int
int
i=88;
*pi=&i;
**ppi=π
***pppi=&ppi;
***pppi -> 88
int *a,*b,*c;
char* d,*e;
float*f;
int i,*ip=&i; //ИНИЦИАЛИЗАЦИЯ
pppi ->
(*pppi)==ppi ->
(*ppi)==pi ->
(*pi)==i
char *(*(*var)())[10];
*(*(*pppi))
7
Массивы (векторы)
float echo[10];
int fox[5][20];
int a[5]={7,6,9};
// a[3]=a[4]=0
int b[][2]={{1,2},{3,4},
{5,6}}; // b[3][2]
int c[][2]={1,2,3,4,5,6};
int d[][2]={{1},{2},{3}};
(*R32).Age=33;
R32->Age=33;
struct Err
{ Err d; ... }; // Ошибка
struct Corr
{ Corr *pc; ... };
struct Beg{...} golf;
struct next{ Beg st; ...};
struct A; // Неполное опр.
struct B {struct A *pa};
char vls2[]="2nd very long" struct A {struct B *pb};
" string.\n";
struct a1
fox=&fox[0][0]
{ ...
int oscar;
sizeof
};
struct a2
{ ...
Структуры
a1 lima;
}tango;
struct Student
{
//...
char FirstName[20];
char SecondName[20];
tango.lima.oscar=256;
char SurnameName[20];
int Age,Year;
char Dept[20];
};
Student St1;
Student i81[31];
St1.FirstName[]=”Name”;
Student *R32; // Указатель
R32 – адрес объекта
*R32 – сам объект
8
Функции
Вызов функции
Прототип
int a=10,b=15,c;
c=Max(a,b);
void func1(int j,float* f); c=Max(9,10);
void func1(int,float*);
Передача аргументов
double func2();
double func2(void); // вар. #include <iostream.h>
void swap1(int x,int y)
int func3(int x,...);
{
int z=y;
Стандартные значения
y=x; x=z;
аргументов (по умолчанию)
}
void main()
void DrawCircle(int x=100, {
int y=100,int r=100);
int a=5,b=10;
swap1(a,b);
void DrawCircle(int=100,
cout<<a<<’ ’<<b<<endl;
int=100,int=100);
// a=5, b=10
}
void DrawCircle(int x,int
y=100,int r); // Ошибка
void swap2(int& x,int& y)
{
DrawCircle(); // Вызов
int z=y;
DrawCircle(200);
y=x; x=z;
DrawCircle(200,300);
}
DrawCircle(,,400); //Ошибка //...
swap2(a,b)
Определение функции
// a=10, b=5
int Max(int a,int b)
{
return a>b?a:b;
}
int Max(int a,int b)
{
if(a>b) return a;
else
return b;
}
void Show(Student& st);
char* GetName(const
Student& st)
{
return st.FirstName;
}
9
int& Ref(int& x)
{
return x;
}
//...
int a=5;
Ref(a)=10;
cout<<a<<endl;
// a=10;
int n=-15;
void invert(int &k=n)
{ k=-k;}
//...
int a=10,b=20;
float c=3.14;
invert(); // n=15
invert(a); //a=-10
invert(a+b); //a=10,b=20
invert(int(c)); //c=3.14
Подставляемые функции
inline
int i,*a,*ip=&i;
*ip
*a=1; // Ошибка.
L-выражение
L-value
char *p;
int i;
long n;
(long*)p=&n; // Допустимо.
(long)i=n; // Ошибка.
Связь массивов с указателями
int a[5];
*y
int *y;
y=&a[0];
y=a;
a[i] ~ *(a+i)
y[i] ~ *(y+i)
inline int HiWord(long L)
{
return (int)(L>>16);
}
a[5] – массив
a – имя массива
y=&a[0] – адрес 0-го эл-та
a - адрес 0-го элемента
x0 – содерж. 0-го эл-та
if, while, for, switch,
goto
a[0]=x0;
a[1]=x1;
x0 = *y = *a = a[0]
x1 = *(y+1) = *(a+1)= a[1]
y=a; y++; // Допустимо.
a=y; a++; // Ошибки.
b[i][j][k]=*(*(*(b+i)+j)+k)=
*(b[i][j]+k)
10
PE[IE]
PE – указатель на массив
PE[IE] – IE-й элемент
*(PE+IE) – другая форма
*(IE+PE) ~ *(PE+IE) =>
IE[PE]
int m[]={1,2,3,4};
m[0]==1
0[m]==1
++ -- * &
*p++ -> 1). *p
char* month1[]={”январь”,
”февраль”,”март”};
Составные описатели
2). p++
i2
20
i1
10
*&i2
-> 20
*&++i2 -> 21
30
21
10
*p
-> 21
*p++
-> 21
*p
-> 10
30
21
10
++*pi -> 11
30
21
11
*--p
-> 21
30
21
10
++*--p -> 31
31
21
int *arp[20];
int* arp[20]; //Массив ук.
char month2[][10]={...};
int i1=10,i2=20,i3=30;
int *p=&i2;
i3
30
Массивы указателей
10
++&i2; //Ошибка–не L-выражение
--&i2++; // То же самое
«изнутри - наружу»
char *(*(*var)())[10];
7 6 4 2 1 3 5
1.
2.
3.
4.
5.
6.
7.
Идентификатор var – это
указатель на
функцию, возвращающую
указатель на
массив из 10
указателей на
значения типа char.
int *arp[5]; –массив указ.
int (*par)[5]; - указатель
на массив.
long *fp(); - функция,
возвр. указатель.
long (*pf)(); - указатель
на функцию, возвр.
значение типа long.
float (*f1())[3]; - функц.
struct Student{};
Student& (*AS[5])(); массив указ. на
функции, возвр. ссылки
на структ. тип Student.
11
Преобразование типов указателей
char c,*p=&c;
void *v=p; //Неявное преобр
char *q=(char*)v; //Явное
v=&c;
v++; // Ошибка
(char*)v++;
Указатели и константы
char a,b;
// Указатель на константу
char const *str2="TTT";
const char *pcc=&a;
pcc=&b;
// *pcc='z'; // Ошибка.
// Константный указатель
char *const cpc=&a;
// cpc=&b; // Ошибка.
*cpc='z';
const k=10;
int *p=&k; // Ошибка.
Download