Форум программистов, компьютерный форум CyberForum.ru

Вопрос про указатели - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
01.02.2010, 14:53     Вопрос про указатели #1
C++
1
char *a = "s";
1. Выделяется место в памяти
2. В это место записывается s
3. Указателю a приваивают адрес памяти где храниться s
так?

а почему нельзя вот так
C++
1
int *a = 5;
Ну никак не пойму. Объясните пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2010, 14:53     Вопрос про указатели
Посмотрите здесь:

Вопрос про указатели C++
C++ Опят про указатели)
Вопрос про указатели на массивы C++
Про указатели . C++
Про указатели C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.02.2010, 20:08     Вопрос про указатели #41
не вижу никакого смысла спорить с упрямцами. столкнутся с чем-нибудь кроме решения задачника - сами поймут.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.02.2010, 03:57     Вопрос про указатели #42
Цитата Сообщение от Krist_ALL
угу(
непонял вот это
Цитата Сообщение от accept
C
1
char *a = 's';
не сработает
's' преобразуется в код символа s из таблицы символов
в таблице ASCII код символа s равен 0x73
в десятичной системе 0x73 равно 115

получается, что
C
1
char *a = 's';
равно
C
1
char *a = 0x73;
равно
C
1
char *a = 115;
115 или 0x73 или 's' не имеет адреса
мы не можем сделать
C
1
char *a = &'s';
потому что 's' - это не объект, адрес которого можно узнать, а символьная константа
символьная константа преобразуется в целочисленную константу
целочисленная константа - это число
число - это значение

a - это переменная, даже char *a - это переменная
это переменная потому, что её значение может меняться в течение программы

значением переменной типа указатель на какой-то тип X является адрес объекта типа X
переводим
значением переменной типа указатель на тип char является адрес объекта типа char

C
1
char *a = 115;
выдаст ошибку, потому что переменной типа указатель на символ присваивается целое число
этой переменной должен присваиваться указатель на символ
указатель на символ - это адрес символа
поэтому, если мы хотим поместить адрес напрямую, мы должны целое число привести к типу указателя на символ

C
1
char *a = (char *) 115;
в переменную a запишется адрес, который равен 115

C
1
printf("%p" "\n", a);
покажет 0x73

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
 
int main(void) /* C89 ANSI */
{
    char *a;
    
    a = (char *) 115;
    
    printf("%p" "\n", a);
    
    exit(EXIT_SUCCESS);
}
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
06.02.2010, 13:12  [ТС]     Вопрос про указатели #43
Что такое массив указателей и нафик он нужен?
C++
1
2
3
4
5
char *wday[] = {"Воскресенье","Понедельник","Вторник",
 
"Среда","Четверг","Пятница","Суббота",
 
"Неизвестен"};
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.02.2010, 13:30     Вопрос про указатели #44
Цитата Сообщение от Krist_ALL Посмотреть сообщение
Что такое массив указателей и нафик он нужен?
C++
1
2
3
4
5
char *wday[] = {"Воскресенье","Понедельник","Вторник",
 
"Среда","Четверг","Пятница","Суббота",
 
"Неизвестен"};
для получения названия дня недели по порядковому номеру например:

C++
1
2
3
4
char *pDayname = wday [7];
if (n < 7){
   pDayname = wday [n];
}
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
07.02.2010, 14:56  [ТС]     Вопрос про указатели #45
А вот еще вопросец:
C++
1
int *arr = new int[5];//Выделяем память под 5 чисел типа инт и присваиваем указателю arr адрес начала блока памяти из 5 штук типа инт
Я хочу присвоить число 10 arr[0]
почму я должен писать arr[0] = 10;
а не *arr[0] =10;
раньше понимал ща забыл((((
@KOT@
81 / 39 / 2
Регистрация: 29.01.2010
Сообщений: 386
07.02.2010, 19:50     Вопрос про указатели #46
Цитата Сообщение от Krist_ALL Посмотреть сообщение
А вот еще вопросец:
C++
1
int *arr = new int[5];//Выделяем память под 5 чисел типа инт и присваиваем указателю arr адрес начала блока памяти из 5 штук типа инт
Я хочу присвоить число 10 arr[0]
почму я должен писать arr[0] = 10;
а не *arr[0] =10;
раньше понимал ща забыл((((
Потому что когда ты пишешь arr[0] = 10; - 10 ты присваиваешь переменной-указателю arr.
А когда *arr[0] =10; - ты присваиваешь 10 не указателю, а переменной, на которую этот указатель указывает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2010, 02:39     Вопрос про указатели
Еще ссылки по теме:

Популярно объясните про указатели C++
Пояснить про указатели и ссылки C++
Про указатели C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.02.2010, 02:39     Вопрос про указатели #47
Krist_ALL, когда такую строку записал, сразу после неё delete [] пиши, если даже не используешь - комментируй, но чтобы было

Цитата Сообщение от Krist_ALL
Я хочу присвоить число 10 arr[0]
*arr = 10;
arr[0] = 10;

*arr[0] работает так: сначала берётся значение из arr[0], потом к этому значению применяется разыменование * (как будто в arr[0] хранится адрес, хотя там значение типа int)
Yandex
Объявления
08.02.2010, 02:39     Вопрос про указатели
Ответ Создать тему
Опции темы

Текущее время: 08:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru