Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 16.01.2009, 15:15   #1
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
Репутация: 10
По умолчанию Указатели и динамические массивы.

Помогите разобраццо плз. в указателях.
*p-переменная указатель которая хранит адрес в памяти некоего обьекта(переменной)
&a-адрес переменной а
p=&a переменной указателю p присваеваем адрес переменной а.
а=*p переменной а присваеваем значение найденной по адресу р.
Смысл использования указателей в том чтобы сэкономить память при множественном присваивании одной переменной множеству других переменных.
Пока правильно понимаю?...

Обьясните плз каким боком связаны создание динамических массивов и указатели.
__________________
Poker
Airou вне форума   Ответить с цитированием
Старый 16.01.2009, 16:49   #2
MaTBeu
Eclipse Foundation
Профессионал
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Адрес: Стокгольм
Сообщений: 2,623
Репутация: 1148
По умолчанию

Указатель - это переменная которая хранит адрес. Когда мы пишем
Код:

int *a;
a = new int[10];

то мы выделяем память под массив из 10 элементов. И присваиваем адрес первого элемента указателю. Теперь указатель указывает на первый элемент массива.
MaTBeu вне форума   Ответить с цитированием
Старый 16.01.2009, 19:26   #3
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
Репутация: 10
По умолчанию

Тоесть теперь написав так
Код:

int *a;
a = new int[10];

и присвоив *a[2]=10 получим что по адресу второй ячейки будет число 10?

Вот я нашел пример создания динамического двумерного массива.

Код:

#include<stdio.h>
#include<conio.h>

int **matrix;
int N,M;
int i,j;
void main(){
	printf("N=");
	scanf("%d",&N);
	printf("M=");
	scanf("%d",&M);
	/*Создание динамического массива*/
	matrix=new int*[N]; /*Выделение памяти под массив указателей из N элементов 
а затем присваеваем адрес 1го элемента matrix'у*/
	for(i=0;i<N;i++)
	matrix[i]=new int[M]; /*Выделяем память под новый массив из M элементов и присваеваем адрес 
1го элемента из этих новосоданных массивов каждому указателю массива созданногоранее*/

	/*Ввод массива*/
	for(i=0;i<N;i++)
		for(j=0;j<M;j++)
			scanf("%d",&matrix[i][j]);
	}

Код прокоментировал я сам... если я чтото недопонял поправьте плз. И еще
И еще чтобы теперь присвоить переменной int a; значение одного из элементов матрицы как нужно написать? ...
а=**matrix[0][0]; или a=matrix[o][o];?
__________________
Poker
Airou вне форума   Ответить с цитированием
Старый 16.01.2009, 19:31   #4
MaTBeu
Eclipse Foundation
Профессионал
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Адрес: Стокгольм
Сообщений: 2,623
Репутация: 1148
По умолчанию

Присвоение идет как обычному массиву - разыменовывать указатель не нужно.
Код:

a[2] = 10;
a[0][0] = 15;
s = a[0][0];     //именно нули а не буквы о как у вас.

MaTBeu вне форума   Ответить с цитированием
Старый 16.01.2009, 19:36   #5
breate
Форумчанин
 
Аватар для breate
 
Регистрация: 30.12.2008
Адрес: Минск, Беларусь
Сообщений: 78
Репутация: -20

icq: 424038793
skype: breate.by
По умолчанию RE

суть указателя заключается в том что ты на прямую работаешь с памятью а не с переменной при реализации локальных переменных стандартных типов пользоватся указателями бессмысленно но когда пишешь свои классы даже не классы а возьмём массив на 100 элементов типа инт тюе 400 байт и ты его передаёш в некотурую функцию типа сорт() функция берёт и копирует массив в стег т,е уже потрачено 800 б а если использовать указатель то функция типа сорт() возьмёт адрес памяти и потрачено будет только 400 байт но это тоже не лучший пример но наглядный, для реализации Адт необходимо не 400 байт а намного больше! Углублятся в это дело не буду раз такие вопросы, просто если тебе нужно оформить 1000 элементов ты не будешь обзывать их кождый своим именем а используешь либо массив элементов или связаный список(элемент+указатель на следующий элемент) тем самым сэкономив не компьютерную память а свою! Но вообще понимание у тебя правильное!
breate вне форума   Ответить с цитированием
Старый 16.01.2009, 20:05   #6
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
Репутация: 10
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
//именно нули а не буквы о как у вас.
А это я по ошибке запечатавшись вставил.

MaTBeu, breate спс.
__________________
Poker
Airou вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++.Указатели и массивы Wia Помощь студентам 1 15.12.2008 19:29
Помогите переделать 2 задачи под динамические массивы (Паскаль) mpegable Помощь студентам 2 27.05.2008 17:32
Задачи на массивы и указатели в СИ D@rk_Spirit Общие вопросы C/C++ 3 29.12.2007 09:01
Циклическо сдвинуть элементы массива на K позиций влево, тоже сделать, испульзуя динамические массивы Fimogen Общие вопросы C/C++ 10 03.11.2007 12:19


06:37.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru