Чем отличается char* от int*, float* и других в Си?

Программирование для меня - кое-что новое, учусь азам по лекциям. И, вот не понимаю, если звёздочка (*) - это указатель, то чем указатель на int отличается от указателя на char? Да, между собой они [char и int] отличаются. Но ведь если файл - только указатель, то чем будет отличаться указатель на char от указателя на int? Всё равно будет что-то вида 0xXXXXXX...
  • Вопрос задан
  • 3258 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Размер указателя один и тот же, если вы это имеете ввиду.
char* отличается от int* тем, что первый указывает на область памяти в sizeof(char) байт, а второй в sizeof(int) байт. Это важно, например для адресной арифметики.
Например имеем:
int ival[] = {0,1,2,3};
char* pc = "This is a string";
int* pi = &ival;

Если мы делаем pc++, то к pc прибавляется sizeof(char), а в случае pi++ к pi прибавляется sizeof(int).
А так же, когда мы делаем разъименование, то получаем в результате соответствующий тип:
*pc - дает char
*pi - дает int
Если бы не было типизации указателей, то не было бы и адресной арифметики и разъименования. Посмотрите, например, что можно сделать с указателем на void.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
Указатель - это переменная, которая хранит адрес одного байта в памяти. Часто и сам адрес называют указателем, потому что сам адрес обычно не используется и подразумевает только то, что находится по этому адресу (поэтому они стали синонимами).
По одному адресу ты не можешь сказать, сколько байт там можно рассматривать целиком, так как сам адрес даёт информацию только об одном байте. Поэтому у указателя есть тип, который означает, что по тому адресу лежит столько-то байт, которые надо рассматривать как единое целое.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы