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

Автоматические переменные - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив объектов http://www.cyberforum.ru/cpp-beginners/thread793712.html
Здравствуйте,помогите починить программу,не знаю в чем причина,мб недопонимаю.... Задание: Элементы масива которые больше 10 заменить на 1, остальные округлить до ближайшего целого. #include <iostream> #include <cmath> using namespace std; class top {int a; public: void vin (int n) {a=n;} int fal() {return if(abs(a)>10) {a=1}; ...
C++ Структура данных Здравствуйте,помогите исправить программу на структуры.Задание: Имеется список 10 студентов,вывести студентов старше 20 лет. Программа из методички,но она не работает,пробывал переделать - не получилось... #include <iostream> #include <stdio.h> #include <string.h> #include <conio.h> using namespace std; struct student{char fio; int god;}; student gr; int main() http://www.cyberforum.ru/cpp-beginners/thread793701.html
C++ Обработка исключительных ситуаций
Код программы,Что та не робит помогите #include "stdafx.h" #include <iostream> #include<conio.h> using namespace std; int _tmain(int argc, _TCHAR* argv) { setlocale(0,"rus"); float z,m; try
C++ Получить новую матрицу из данной с использованием указателей
Дана действительная квадратная матрица порядка 2n. Получить новую матрицу, переставляя её блоки размера nxn. Нужно сделать задачу с использованием указателей, что-то я запутался с ними, что не так тут? Выводит неверный ответ.. #include <iostream> using std::cout; int main(int argc, char* argv) {
C++ Задачка. Поле шахматной доски http://www.cyberforum.ru/cpp-beginners/thread793686.html
Поле шахматной доски задается парой натуральных чисел: Первое указывает номер вертикали при счете слева направо, второе - номер горизонтали при счете снизу вверх. Расстановка фигур задается таким образом, что пользователь определяет вначале поля, на которых стоят перечисленные белые фигуры, затем - поля, на которых стоят перечисленные черные фигуры. На доске стоят белый ферзь, белая ладья и...
C++ С++ Теория алгоритмов. Найти количество делителей Пусть х — некоторое натуральное число (1 <= x <= 1018), обладающее следующим свойством - все простые делители этого числа не превосходят 1000. Найти количество его делителей. Пример: Входные данные/Выходные данные 12/6 239/2 подробнее

Показать сообщение отдельно
KostyaKulakov
Заблокирован
24.02.2013, 16:08     Автоматические переменные
Цитата Сообщение от Gleb4uk Посмотреть сообщение
Доброго времени суток, уважаемые форумчане!

В книге Стивена Прата по С++ приводится следующий листинг:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// delete.cpp -- using the delete operator
#include <iostream>
#include <cstring>      // or string.h
using namespace std;
char * getname(void);   // function prototype
int main()
{
    char * name;        // create pointer but no storage
 
    name = getname();   // assign address of string to name
    cout << name << " at " << (int *) name << "\n";
    delete [] name;     // memory freed
 
    name = getname();   // reuse freed memory
    cout << name << " at " << (int *) name << "\n";
    delete [] name;     // memory freed again
    // cin.get();
    // cin.get();
    return 0;
}
 
char * getname()        // return pointer to new string
{
    char temp[80];      // temporary storage
    cout << "Enter last name: ";
    cin >> temp;
    char * pn = new char[strlen(temp) + 1];
    strcpy(pn, temp);   // copy string into smaller space
 
    return pn;          // temp lost when function ends
}
на основании этого листинга даётся пояснение автоматически выделяемой памяти для переменных, объявленных внутри блоков (в данной ситуации - внутри функции getname() ). Речь о том что указатель pn объявляется для того, чтоб не потерять значение вводимой строки.
Тут возникает вопрос: почему значение символьного массива удаляется при выходе из функции, а значение области памяти, на которую указывает вышеупомянутый pn остаётся?
Сразу второй вопрос: почему не передать функции значение массива сразу через return?
И третий вопрос: если бы функция возвращала массив, то как правильно её объявить, сразу после круглых скобок с перечнем параметров ставить квадратные с количеством элементов массива?
после выхода из функции автоматически удаляются все объявленные переменные внутри функции за исключением static
 
Текущее время: 20:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru