gcc –c file.c
gcc –c file.cpp
gcc –c file.p
В первом случае файл будет скомпилирован как файл на языке C, во втором
на C++, в третьем – на Паскале.g++ -c file.c
– в этом случае файл будет скомпилирован как
C++ файл, несмотря на расширениеgcc main.o –o program –lstdc++
Можно использовать команду g++ вместо gcc, в этом случае
файл
компилируется как программа на языке C++, а библиотека libstdc++
подключается автоматически:g++ main.o -o program
gcc main.o –o program –static
Название типа | Кол-во байт для хранения |
Диапазон |
char | 1 | -2^7..2^7-1 |
short | 2 | -2^15..2^15-1 |
int | 4 | -2^31..2^31-1 |
long | 4 | -2^31..2^31-1 |
long long | 8 | -2^63..2^63-1 |
unsigned char | 1 | 0..2^8-1 |
unsigned short | 2 | 0..2^16-1 |
unsigned int | 4 | 0..2^32-1 |
unsigned long | 4 | 0..2^32-1 |
unsigned long long | 8 | 0..2^64-1 |
Название типа | Кол-во байт для хранения | Диапазон |
float | 4 | 1,4 * 10^-45.. 3.4 * 10^38 |
double | 8 | 4,94 * 10^-324.. 1.79 * 10^308 |
float f=1.5;
int a=f; //неявное приведение
f=a;
в конце выполнения этого кода f будет равно 1.
long l;
short s;
s=(short)l;
При приведении типов, которые используют большее количество байт для
хранения, к типам, которые используют меньше байт для хранения, могут
возникать ошибки. Это связано с тем, что в этой ситуации копируется
столько битов, сколько можно скопировать, начиная с младшего. Например,
int A=128;
char B=A;
A=B;
в конце выполнения этого кода, в A будет находиться число -128. Это
происходит потому, что переменная типа char кодируется 8 битами, а int
кодируется большим количеством бит (количество бит зависит от
архитектуры). На строчке “char B=A;” в B
записывается только 8 младших бит числа A, 8 бит равен 1, поэтому
компилятор считает, что в B хранится отрицательное число. На строчке
«A=B» в A значение B копируется как отрицательное
число.int array[10];
место, выделяемое под этот массив –
10*sizeof(int)
int array[10]={0,1,2,3,4,5,6,7,8,9}; // массив заполняется указанными
числами
int array[10]={0}; // весь массив заполняется нулями
int array[]={0,1,2,3,4,5,6,7,8,9}; //в этом случае размер массива
автоматически вычисляется компилятором
для типа char:
char array[]={0,1,2,3,4,5,6,7,8,9};
char
array[]={‘H’,’e’,’l’,’l’,’o’};
char array[]=”Hello”; //в этом случае размер
массива будет равен 6, так как еще добавляется нуль-символ,
обозначающий конец строки
Запись с использованием { и } может быть использована только для
инициализации массива.
int M[10][10];
Двумерный массив по-другому можно назвать массивом массивов.
int M[2][2] = { {1,2} , {3,4} };
int array[10]={0,1,2,3,4,5,6,7,8,9};
int a=array[index];
где index – любое целое число, задающее смещение от первого
элемента массива.int *p;
int *p;
int a;
p=&a; //записать в переменную p адрес a
Чтобы обратиться по адресу, находящемуся в указателе, применяется
оператор "*":
printf(“%p”,p);
Формат вывода указателя зависит от архитектуры компьютера и компилятора.
int i[5]={1,2,3,4,5};
char c[]=’hello’;
int *pi=i;
char *pc=c;
pi+=1; // будет сделан сдвиг адреса на размер одного int
pc+=1; // будет сделан сдвиг адреса на размер одного char
Сдвиг зависит от типа объекта, на который указывает указатель.
char c[4];
char *p=&c[0]; //&c[0] – адрес первого
элемента массива, или адрес массива
int *pi=p; // на C эта строка считается нормальной, на C++ будет выдана
ошибка, так как указатели pi и p разных типов.
int *pi=(int*)p; //эта строка будет правильной.
char array[10];
char *p;
p=array; // в p передается адрес массива (адрес нулевого элемента)
array=p; //это ошибка
Это объясняется тем, что массив – это фиксированная область в
памяти, а указатель – это адрес в памяти.