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

Указатели - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ ПосоветуйтЕ http://www.cyberforum.ru/cpp-beginners/thread96702.html
Хочу СПросиТь есть ли в С++ оператор вазврата типу goto label 1; FE #include.... ........ ........ 1:if(условие) .......... else goto 1
C++ Ошибка при работе со структурой #include <iostream.h> #include <conio.h> #pragma argsused float v; struct GOODS { unsigned quantity; float price;}; void cost(GOODS &goods) {v=goods.price*goods.quantity;} int main() http://www.cyberforum.ru/cpp-beginners/thread96701.html
Грузовой автомобиль выехал из одного города в другой... C++
Составить программу для решения текстовой задачи. Грузовой автомобиль выехал из одного города в другой со скоростью км/ч. Через t ч в этом же направлении выехал легковой автомобиль со скоростью км/ч. Составить программу, определяющую, догонит ли легковой автомобиль грузовой через ч после своего выхода. Что то я ее не могу додумать. Вроде работает правильно, но мне кажется, что там...
дерево C++
// derevo_lr2.cpp : Defines the entry point for the console application. #include "stdafx.h" #include "iostream" using namespace std; #include "conio.h" #include "string.h" #define VER 50 #define SIZE 20
C++ Определить пересекаются две прямые, параллельны или совпадают http://www.cyberforum.ru/cpp-beginners/thread96661.html
Две прямые заданы уравнениями: ax+by+c=0, px+qy+r=0
C++ Найти периметр треугольника, если он задан вершинами вершины (x1,y1),(x2,y2),(x3,y3) подробнее

Показать сообщение отдельно
insideone
Модератор
Автор FAQ
 Аватар для insideone
3620 / 898 / 47
Регистрация: 10.01.2010
Сообщений: 2,427
18.02.2010, 01:04     Указатели
Цитата Сообщение от Шанти Посмотреть сообщение
стыдно мне такие вопросы задавать
один из наших преподавателей говорил
Стыдно не задавать вопросы, стыдно остаться дураком
он конечно импульсивен, но в чем то прав

Про возможное использование:
Адрес переменной берется для того чтобы можно было потом эту переменную изменить внутри функции. Например этот код ничего не сделает с переменной a, потому как передается копия
C++
1
void foo(int a) { a = a + 100; }
А этот сделает, потому как передается указатель (как бы ярлык к переменной)
C++
1
void foo(int* a) { (*a) = (*a) + 100; }
(*a) - это обращение к реальному значению по "ярлычку"

Кроме того, указатель и сам является переменной, что позволяет обращаться к разным элементам массива посредством прибавления x к указателю
C++
1
2
3
4
5
6
7
int* a = new int[10];
a[0] = 10; // запись в первый элемент массива
*(a+1) = 12; // запись во второй элемент массива
cout << a[0]; // вывод первого элемента массива
cout << *(a+0); // тоже вывод первого элемента массива
cout << a[1]; // вывод второго элемента массива
cout << *(a+1); // да да, тоже вывод второго элемента массива
Добавлено через 20 минут
Мне трудно привести хороший пример когда нужно брать "указатель" на "указатель". Однако возможно это все же будет понятно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void foo(Obj* x) { x = new Obj; } // в x запишется адрес выделенного объекта
// однако так как x видна лишь в функции, наша программа послав
// в функцию просто указатель - не получит адрес выделенного объекта
// при таком использовании
Obj* z = NULL;
foo(z);
// тут z все так же NULL
 
void foo(Obj** x) { *x = new Obj; } // а так получит
Obj* z = NULL;
foo(z);
// тут z - уже указатель на объект выделенный в функции

Насчет new в функции это конечно плохо, но это другая тема Я просто показываю что выделяются ресурсы...
 
Текущее время: 16:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru