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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
#1

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

01.02.2010, 14:53. Просмотров 2154. Ответов 46
Метки нет (Все метки)

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++
В книге написано int a; int *p; p = &a; //У меня выдает ошибку p = &a; //Так работает p = ПОЛУЧИТЬ_адрес_объекта - Это...

Про указатели - C++
В среде C++ Builder разбираюсь с логикой работы с указателями. По определению (в моем его понимании) указатель это адрес в памяти на...

Про указатели - C++
Здравствуйте я совсем маленький C++ программер, вот сейчас разбираюсь с указателями. Подскажите пожалуйста. В книге встретил пример,...

Про указатели . - C++
Всем привет: Продолжаю свою традицию: Вот придумал необычную задачку, может кому то она покажется неинтересной, сложная или простая...

Опят про указатели) - C++
int a = 5; int *b =&a; cout <<*b<<endl; *b++; cout <<*b<<endl; В строке 4 что происходит? По идее если * то мы работаем...

Про массивы и указатели - C++
#include <iostream> using namespace std; int Digit = { {1,8,6,7},{3,2,9,4},{5,1,2,7},{8,6,2,5} }, test; int main() { ...

Указатели: правильно ли я понял вопрос? - C++
Есть задание Я написал такой код: #include<iostream> using namespace std; #include<windows> int main() {

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yurii_74
paladin
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
03.02.2010, 13:21     Вопрос про указатели #31
Воспринимай это как:
C++
1
[B]int*[/B] a;
То есть мы объявляем указатель с именем a;
C++
1
int* a = 5;
а затем пытаемся сделать a = 5, тогда как хотим сделать
C++
1
a = new int; *a = 5;
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.02.2010, 13:36     Вопрос про указатели #32
Цитата Сообщение от Yurii_74 Посмотреть сообщение
Воспринимай это как:
C++
1
[B]int*[/B] a;
То есть мы объявляем указатель с именем a;
C++
1
int* a = 5;
а затем пытаемся сделать a = 5, тогда как хотим сделать
C++
1
a = new int; *a = 5;
откуда ты знаешь что "мы хотим"? мы можем хотеть именно указателю пятерку присвоить! и это делается задней левой.
Yurii_74
paladin
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
03.02.2010, 15:06     Вопрос про указатели #33
Цитата Сообщение от novi4ok Посмотреть сообщение
откуда ты знаешь что "мы хотим"? мы можем хотеть именно указателю пятерку присвоить! и это делается задней левой.
Из того, что написал топикстартер я сделал такой вывод. Он явно не хотел получить то, что получил.

Не по теме:

Don't try to provoke me. Be nice, please.

@KOT@
81 / 39 / 2
Регистрация: 29.01.2010
Сообщений: 386
03.02.2010, 16:04     Вопрос про указатели #34
Цитата Сообщение от novi4ok Посмотреть сообщение
зачем человека в заблуждение вводишь! указатель хранит то что туда положат!
Нет. Переменная хранит то, что туда положишь. А указатель хранит лишь какой-то адрес.
C++
1
int* a;
Это укзатель на тип инт. И на самом деле a можно присвоить лишь адрес - не больше.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.02.2010, 17:38     Вопрос про указатели #35
Цитата Сообщение от @KOT@ Посмотреть сообщение
Нет. Переменная хранит то, что туда положишь. А указатель хранит лишь какой-то адрес.
C++
1
int* a;
Это укзатель на тип инт. И на самом деле a можно присвоить лишь адрес - не больше.
наивное заблуждение. эта переменная - просто четыре байта, которые могут содержать любую комбинацию бит. и присвоить такой переменной можно также любые четыре байта. лишь компилятор знает о том, что это - указатель на целое, и будет генерировать соотв. код из того, что ты напишешь. нужно "смело смотреть правде в глаза"
@KOT@
81 / 39 / 2
Регистрация: 29.01.2010
Сообщений: 386
03.02.2010, 17:50     Вопрос про указатели #36
Цитата Сообщение от novi4ok Посмотреть сообщение
наивное заблуждение. эта переменная - просто четыре байта, которые могут содержать любую комбинацию бит. и присвоить такой переменной можно также любые четыре байта. лишь компилятор знает о том, что это - указатель на целое, и будет генерировать соотв. код из того, что ты напишешь. нужно "смело смотреть правде в глаза"
Верно указатель хранит эту комбинацию бит. Но использовать ее может только как адрес в памяти. Поэтому в указатель нельзя положить только числовую константу - которая и будет адресом памяти. Символьную константу мы засунуть в указатель не можем, лишь адрес на нее.
И когда мы пишем
C++
1
char* a = 'a';
на самом деле компилятор делает следующее
C++
1
2
char a = 'a';
char* a = a;
Добавлено через 3 минуты
Цитата Сообщение от novi4ok Посмотреть сообщение
.скомпилируй и выполни:
C++
1
2
int *pInt = (int*)5;
cout << pInt;
и напиши сюда что получишь.
Когда мы пишем
C++
1
int *pInt=5;
указатель получает значение равное 5 и указывает на ячейку в памяти с адресом 5.

когда
C++
1
int *pInt = (int*)5;
указатель получает адрес ячейки памяти в которой содержиться константа 5.
Поэтому соответсвенно будет выведено число 5.
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
03.02.2010, 18:17     Вопрос про указатели #37
Ага... будет выведено... Access Violation...
Чего это там вдруг константа 5 потеряла?
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.02.2010, 18:28     Вопрос про указатели #38
Цитата Сообщение от @KOT@ Посмотреть сообщение
Когда мы пишем
C++
1
int *pInt=5;
указатель получает значение равное 5 и указывает на ячейку в памяти с адресом 5.
только при этом не забывай упоминать, что ты просто так полагаешь, или тебе так хотелось бы. но зачем утверждать? сначала напиши и скомпилируй (точнее, попробуй скомпилировать), потом утверждай. именно таким образом компилятор это сделать не даст. но имеется достаточно много других способов записать в переменную-указатель пятерку или любое другое число.
@KOT@
81 / 39 / 2
Регистрация: 29.01.2010
Сообщений: 386
03.02.2010, 18:41     Вопрос про указатели #39
Цитата Сообщение от novi4ok Посмотреть сообщение
только при этом не забывай упоминать, что ты просто так полагаешь, или тебе так хотелось бы. но зачем утверждать? сначала напиши и скомпилируй (точнее, попробуй скомпилировать), потом утверждай. именно таким образом компилятор это сделать не даст. но имеется достаточно много других способов записать в переменную-указатель пятерку или любое другое число.
Я утверждаю потому что знаю. Потому что все это прекрасно знают.

И очень бы хотелось бы услышать способ, при котором ты сможешь занести в указатель любое число. Никогда с таким не сталкивался.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
03.02.2010, 19:01     Вопрос про указатели #40
Цитата Сообщение от @KOT@ Посмотреть сообщение
И очень бы хотелось бы услышать способ, при котором ты сможешь занести в указатель любое число.
C++
1
int* a = reinterpret_cast<int*>(0xDEAD);
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.02.2010, 20:08     Вопрос про указатели #41
не вижу никакого смысла спорить с упрямцами. столкнутся с чем-нибудь кроме решения задачника - сами поймут.
accept
4821 / 3241 / 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
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
06.02.2010, 13:12  [ТС]     Вопрос про указатели #43
Что такое массив указателей и нафик он нужен?
C++
1
2
3
4
5
char *wday[] = {"Воскресенье","Понедельник","Вторник",
 
"Среда","Четверг","Пятница","Суббота",
 
"Неизвестен"};
novi4ok
551 / 504 / 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];
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2010, 14:56     Вопрос про указатели
Еще ссылки по теме:

Пояснить про указатели и ссылки - C++
есть переменное и указатель.. Значение нашей переменной случайный адрес, Как менять адрес указателя, таким образом, что бы она стала...

Популярно объясните про указатели - C++
Что-то плохо даётся мне тема про указатели. Я хорошо уяснил, что вот так создаётся указатель: int *pointer; Я так же хорошо...

Про указатели с использованием функции - C++
Вопросы в комментариях к коду #include &lt;iostream&gt; #include &lt;cctype&gt; #include &lt;cstring&gt; using namespace std; void...

2 вопроса про скорость - указатели и строки - C++
Здравствуйте. Скажите, а работа с большими массивами с помощью указателей происходит быстрее (при передаче указателя в функцию), чем...

Расскажите популярно про ссылки и указатели - C++
Помогите разобраться со ссылками и указателями на различные объекты. Запутался вообще в них полностью. Когда читаю книгу про них, то вроде...


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

Или воспользуйтесь поиском по форуму:
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;
раньше понимал ща забыл((((
Yandex
Объявления
07.02.2010, 14:56     Вопрос про указатели
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru