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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Меню в консоли http://www.cyberforum.ru/cpp-beginners/thread769766.html
Меня интересует вот что: зачем в функции int menu(); вот это условие code=getch(); if (code==224) { //------- } Программа и без него работает хорошо! #include <iostream> #include <conio.h> #include <windows.h>
C++ вывести результаты решения СЛАУ в виде таблицы ( графические функции) Ребят помогите пожалуйста, есть полностью рабочий и компилирующийся код для решения слау методом гаусса но решение необходимо представить в виде таблицы помогите пожалуйста! Добавлено через 27 минут вверх Добавлено через 3 минуты вверх http://www.cyberforum.ru/cpp-beginners/thread769764.html
C++ Как замостить текстурой прямоугольник?
Имеется уже созданная (скорее всего загруженная из файла) текстура на hdc1, она известного размера (xt,yt) Надо ей замостить прямоугольник x1,y1,x2,y2 на hdc2 Правильно - т.е. если целое количество не влазит, то высести нужные куски по краям, если вообще текстура оказалась больше прямоугольника - то вывести ее часть. 1_ Это конечно можно сделать просто серией проверок и копирований в циклах,...
Найти ошибку C++
Добрый день. Есть задача с codeforces (условие). Вот моё решение: #include <iostream> #include <vector> using namespace std; int main() { int n, m; cin >> n >> m;
C++ Программа, которая выводит на экран изображение шахматной доски http://www.cyberforum.ru/cpp-beginners/thread769712.html
и снова привет! мне опять нужна ваша помощь. вот код, который жутко глючит((( { // Напишите программу, которая выводит на экран изображение шахматной доски. //Черные клетки отображать "звездочкой", белые — пробелом. for (int ryad = 1; ryad <= 8; ryad++) { if (ryad % 2 == 0)
C++ Вычислить сумму элементов массива с нечётными номерами 2. В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму эле-ментов массива с нечётными номерами. Сжать массив, удалив из него все элементы, мо-дуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нуля-ми. подробнее

Показать сообщение отдельно
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
24.01.2013, 13:17     Что такое int*
Цитата Сообщение от UserAK Посмотреть сообщение
может класс хранит все указатели и вообще под этим указателем может что угодно в итоге скрываться
я попытаюсь объяснить на пальцах
C++
1
2
3
4
5
6
int* f()
{int x=2;
return &x;
}
......................................
int *m=f();
в функции выделили память
под переменную x допустим она лежит по адресу 100
функция вернула 100 адрес переменной х
m стала равна 100 адрес валидный
а вот что лежит по этому адресу? может 2( если никто не посягнул на эту память) а может и нет, никто не гарантирует
Это как в файловой системе когда удаляешь файл удаляется запись ссылки на этот файл и сектора помечаются как свободные, но сами сектора никто не переписывает и можно восстановить файл, до тех пор пока другая программа решившая что то записать на диск и увидев пустой сектор не записала свои данные

Цитата Сообщение от UserAK Посмотреть сообщение
стековая переменная, созданная внутри функции, после выхода из функции по логике программы не существует.
переменная не существует а ссылка на её местоположение существует
это как
Незнание закона не освобождает от ответственности. А вот знание нередко освобождает.
(с)Е. Лец

в нормальном программировании так делать нельзя а вот в хакерском нередко используют например вернуть несколько значений (но это сильно платформенно зависимо)

Добавлено через 19 минут
Цитата Сообщение от UserAK Посмотреть сообщение
и ведь когда-то она уничтожится?
она не уничтожается, а объявляется свободной

вот маленький примерчик
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int* func()
{
 int a[10];
 for(int i=0;i<10;i++)
      a[i]=i;
 return a; 
}
int main()
{
int k[10];
int* m=func();
 
 for(int i=0;i<10;i++)
    k[i]=m[i];
 for(int i=0;i<10;i++)  
    printf("%d ",k[i]);
 
 return 0;
 
}
выдаст 0 1 2 3 4 5 6 7 8 9
но если написать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int* func()
{
 int a[10];
 for(int i=0;i<10;i++)
      a[i]=i;
 return a; 
}
int main()
{
int* m=func();
 
 for(int i=0;i<10;i++)
      printf("%d ",m[i]);
 
 return 0;
 
}
то выдавать будет 0 потом всякий мусор потому, что printf выделяя память под свои переменные портит значения
хотя сам указатель продолжает оставаться валидным ( иначе бы вылетела ошибка доступа к памяти)
 
Текущее время: 07:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru