16.08.2006, 10:19
общий
это ответ
Здравствуйте, Долгавин Алексей Сергеевич!
int - Это целочисленные данные, находящиеся в памяти (занимающие в памяти 2-4 байт, в зависимости от используемой платформы);
*int - Это указатель на целочисленные данные, находящиеся в оперативной памяти.
Например:
unsigned int i = 0;// Объявлена переменная i, которая является целым, беззнаковым числом
unsigned int *ptri = &i;// Объявлен указатель на переменную i, целого беззнакового численного типа, где "&" - операция взятия адреса в памяти переменной i
Итого, * - обозначает УКАЗАТЕЛЬ НА ДАННЫЕ, а не сами данные.
Например, чтобы записать в переменную i значение 5, нужно сделать так:
i = 5;// Это прямое присваивание значения 5 переменной i
*ptri = 5;// Присваивание переменной i значения 5 через указатель; Эту запись нужно расшифровывать так: значению, лежащему в памяти по указателю ptri присвоить 5; т.е., в данном случае, * - является синонимом слов "значению, лежащему по указателю..."
Чтобы получить значение i, нужно:
unsigned int x = i;// Просто присваиваем вновь объявленной переменной x значение переменной i
unsigned int x = *ptri;// Переменной x присваиваем значение в памяти, лежащее по указателю ptri (а так как указатель у нас указывает на i (unsigned int *ptri = &i), то в переменную x загрузится значение переменной i)
С char и char* всё то же самое: char - это тип данных (однобайтовое целое или символ), лежащих в памяти, а char* - это указатель на символьные данные, которые лежат в памяти по адресу, на который указывает char*.
Например:
#include <stdio.h>
const char constString[] = "Test string";// Это символьный массив-константа (массив из символов = строка)
printf("\n%s", constString);// Это вывод этой строки; %s - это значит мы должны в параметрах дать _указатель_ на строку, мы его и даём, так как _массив_ в язке С/С++ и _является_указателем_!!!
Т.е., вышеприведённый фрагмент эквивалентен такому фрагменту:
#include <stdio.h>
const char constString[] = "Test string";
const char *str = &constString[0];// В указатель str мы пихаем адрес первого элемента массива constString
printf("\n%s", str);// Вывод той же самой строки
char *s;
char c = ‘t‘;
s = (char *) str;// Или...
s = &((char *) constString[0]);
s[0] = c;// Заменили первую букву в строке на строчную (вместо прописной)...:)
c = ++s;// В переменную c записали _вторую_ букву строки, т.е. сейчас в переменной c буква ‘e‘, а s указывает не на начало строки, а на её _вторую_ букву!