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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
lepufuxa
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 6
#1

Что такое int* - C++

23.01.2013, 15:44. Просмотров 3014. Ответов 21
Метки нет (Все метки)

Если с этим
C++
1
int a=3,*p = &a;
понятно, то есть переменная "p" содержит адресс переменной "a" и указывает на тип int, то с этим не очень понятно
C++
1
int* f(){int x=2;return &x}
Что происходит в случаее с функцией? Где содержится адресс переменной "x", который возвращает иструкция "return &x"? Ведь есть только "int*, а адресс где хранить? Я что-то упускаю, но не пойму.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2013, 15:44     Что такое int*
Посмотрите здесь:

Что это такое int (*func4 (void)(int) - C++
Это примеры указателей на функцию. Понятно.void (*func1) (void *, int *); void (*func2) (int, int *); void (*func3) (void); А это что...

Что такое int*a ? - C++
С++ что такое int*a ??? заранее спс

что такое возможности типа Int? - C++
Здравствуйте, хм глупый вопрос скажите пожалуйста все возможности типа int языка с++:pardon:

Что значит такое объявление typedef int (*A) ( )? - C++
typedef int (*A) ( ) Как его понять? Есть варианты ответа А. Объявление типа, что являет показатель за переменную типа int Б....

Что такое "volatile int" - C++
есть объявление и инициализация переменной: volatile int Sklad = 0; что такое "volatile"? с msdn не очень понял, кто сможет...

Что означает int pos = 0; int value = 5; в данном коде? - C++
#include<conio.h> #include<stdio.h> #include<math.h> void mass(int y); void main() { int y;

int[][] или int[] - что быстрее? - C++
Везде вижу, что лучше использовать одномернный массив, а не двумерный. Всегда принимал это на правду, но сейчас задумался. Нужели умножение...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
23.01.2013, 15:49     Что такое int* #2
Цитата Сообщение от lepufuxa Посмотреть сообщение
int* f(){int x=2;return &p}
а что такое р ?

Добавлено через 2 минуты
а понял, это переменная типа int глобальная или может член класса-владельца функции
lepufuxa
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 6
23.01.2013, 15:53  [ТС]     Что такое int* #3
UserAK, приношу извинения, я писал сообщение побольше этого, но когда нажал отправить, то выкинуло из акаунта, а когда вошел, то выскочила ошибка форума, что я использваол русские и английские слвоа месте, а когда нажал под ошибкой на кнопку назад, то в сообщение не возвращалось, а шла переадресация на эту ошибку, ну а вернутся на само написание сообщения в браузере через стрелочки назад, не смог, так как в ie9 почему то не сохраняется буфер сообщений, которые были на предыдущих страницах открытых в барузере в той же вкладке в отлчии от google chrome. Ну а когда вошел и начал писать заного, то каким то хоткеем случайно создал преждевременно тему. Ну и начал побыстрому редактировать хоть что-то.
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
23.01.2013, 15:53     Что такое int* #4
x - локальная стековая переменная, и она уничтожается после выхода из функции, т.е. адрес указывает не известно на что
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.01.2013, 15:58     Что такое int* #5
Цитата Сообщение от lepufuxa Посмотреть сообщение
Что происходит в случаее с функцией? Где содержится адресс переменной "x", который возвращает иструкция "return &x"?
Нельзя возвращать адреса локальных объектов.
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
23.01.2013, 15:58     Что такое int* #6
Цитата Сообщение от lepufuxa Посмотреть сообщение
int* f(){int x=2;return &x}
если хотите, что бы переменная была доступна после выхода из функции, то разместите её в куче, а не в стеке:
C++
1
int* f(){int *x=new int(2);return x;}
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
23.01.2013, 16:04     Что такое int* #7
lepufuxa, int * в обьявлении на функции указывает нам на то, что функция f возвращает указатель на int.У вас возвращается адрес локальной переменной., которая после выхода из функции уничтожается.Значит указатель будет указывать на ни на что.И если вы потом попытаетесь менять по этому указателю переменную, вам выкинет ошибку.
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
23.01.2013, 16:08     Что такое int* #8
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
которая после выхода из функции уничтожается.
"освобождается"
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Значит указатель будет указывать на ни на что.
на тот же участок памяти и если он не перезаписан еще, то там будет значение x, но надеяться на это не очень хорошо.
lepufuxa
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 6
23.01.2013, 20:22  [ТС]     Что такое int* #9
Этот код был для примера и то что после выхода освобождается понятно. Я имел ввиду каким образом и в каком виде это передается, то есть что и куда будет передаватся через инструкцию return. Ну вот если бы у функции был возвращаемый тип int без указателя, то при вызове функции вернулось бы какое-то число, а если тип с указателем, то return передает адресс, но а что дальше происходит с этим адрессом? Лучше на примере копирования массива через operator=
MrGluck
Модератор
Эксперт CЭксперт С++
7175 / 4341 / 633
Регистрация: 29.11.2010
Сообщений: 11,797
23.01.2013, 21:13     Что такое int* #10
Цитата Сообщение от UserAK Посмотреть сообщение
если хотите, что бы переменная была доступна после выхода из функции, то разместите её в куче, а не в стеке:
C++
1
int* f(){int *x=new int(2);return x;}
ага, и не забудьте потом освободить. А ведь наверняка где-нибудь, да программист с руками с одного места, или просто рассеянный, забудет так сделать. Избегайте выделения памяти в куче внутри функции т.к. понадеяться, на то, что программист знает функцию и что он не забудет освободить память просто нельзя (а это лишь в этой программе одна функция, а представьте, что будет в проекте?) Нет, так делать нельзя.
lepufuxa
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 6
23.01.2013, 22:01  [ТС]     Что такое int* #11
MrGluck, страно это слышать от человека с 717 плюсами в репутации
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
23.01.2013, 22:20     Что такое int* #12
Цитата Сообщение от lepufuxa Посмотреть сообщение
MrGluck, страно это слышать от человека с 717 плюсами в репутации
а я наоборот плюсану. Если есть такая возможность, то пусть функция принимает в качестве аргумента указатель на выделенную память, в которую будет записывать то, что собирается вернуть.
C++
1
2
3
4
5
6
7
8
9
void fill(int* buffer, int size){
  /// так лучше, чем...
}
 
int* fill(int size){
  int* buffer=new int[size];
  ///...чем так
  return buffer;
}
тот кто вызывает функцию лучше знает, когда и каким образом выделять память,
а когда и каким образом освобождать.
может память внутри функции выделялась через malloc??? А может предоставлялась каким-нибудь менеджером памяти? Как я буду гадать, как её освободить, не вникая в тело функции fill?
lepufuxa
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 6
23.01.2013, 22:35  [ТС]     Что такое int* #13
Kuzia domovenok, я же не спорю, но это так категорично звучало, что даже множество больших объектов выделяемых внутри функции, должны были сказать "okay" и начать крашить стек. И безрукость или невнимательность программистов - это не аргумент для отказа от использования кучи внутри функций, так как вся эта "безрукость и невнимательность" - как минимум нежелание в чем либо разбиратся, что может вызвать куда больше проблем, чем шанс не уследить за утечкой памяти. Вообщем, это все оффтоп. На главный вопрос тут так и не ответили, а начали искать что-то в коде, который был для примера.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
23.01.2013, 22:56     Что такое int* #14
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
У вас возвращается адрес локальной переменной., которая после выхода из функции уничтожается.
фиг вам
она остается в памяти никто её специально уничтожать не собирается
просто память получает статус свободной и любая стерлядь может туда записать что угодно
но указатель то валидный а значения могут быть любые
Цитата Сообщение от Croessmah Посмотреть сообщение
"освобождается"
вот это правильней ибо сам БиллГейтс не сможет гарантировать что в этой памяти лежит
но если знать эти подводные камни можно написать програмки которые будут работать

Добавлено через 9 минут
Цитата Сообщение от lepufuxa Посмотреть сообщение
о это так категорично звучало, что даже множество больших объектов выделяемых внутри функции, должны были сказать "okay" и начать крашить стек.
а что так не бывает?
выдели на стеке массив на миллиард интов

Цитата Сообщение от lepufuxa Посмотреть сообщение
И безрукость или невнимательность программистов - это не аргумент для отказа от использования кучи внутри функций,
А кто то предлагал отказаться

Цитата Сообщение от lepufuxa Посмотреть сообщение
как минимум нежелание в чем либо разбиратся, что может вызвать куда больше проблем, чем шанс не уследить за утечкой памяти.
Представь что тебе дали либу, которую написал горе-программист и не документировал
там такая функция
C++
1
myClass* MyGet();
и как ты разберешься что вернули указатель на действующий класс или выделили память с нуля
удалять или нет ??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2013, 23:27     Что такое int*
Еще ссылки по теме:

Объясните что делает int z(int a) - C++
вот весь исходный код #include <iostream> #include <stdio.h> #include <cmath> using namespace std; int z(int a) { int x, y,...

Как присвоить такое значение переменной int - C++
есть две переменные типа int int x=2; int y=3; я хочу чтобы третья переменная Z(тоже тип int) имело значение 23, то есть...

Как написать такое явное преобразование из double в unsigned long int - C++
как написать такое явное преобразование из double в unsigned long int??? спасибо всем кто поможет...

int main () { int a=3,b=2,c; c=a+b; cout << "c=" << c; } Что не правильно? - C++
#include &lt;iostream&gt; using namespace std; int main () { int a=3,b=2,c; c=a+b; cout &lt;&lt; &quot;c=&quot; &lt;&lt; c; }в чем...

Int x(4); Что за объявление? - C++
привет. такой код компилируется и работает: #include &lt;iostream&gt; using namespace std; int main() { int a = 5; int x(4);...


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

Или воспользуйтесь поиском по форуму:
lepufuxa
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 6
23.01.2013, 23:27  [ТС]     Что такое int* #15
Цитата Сообщение от ValeryS Посмотреть сообщение
а что так не бывает?
выдели на стеке массив на миллиард интов
Ну так это был сарказм...

Цитата Сообщение от ValeryS Посмотреть сообщение
а что так не бывает?
выдели на стеке массив на миллиард интов
Просто выделить? Ой лол.
Цитата Сообщение от ValeryS Посмотреть сообщение
А кто то предлагал отказаться
Да, соглашайся.

Цитата Сообщение от ValeryS Посмотреть сообщение
и как ты разберешься что вернули указатель на действующий класс или выделили память с нуля
удалять или нет ??
Так получается, что "горе-программист" не только написал либу, а ещё и дал её?
Yandex
Объявления
23.01.2013, 23:27     Что такое int*
Ответ Создать тему
Опции темы

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