Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

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

Указатель - это переменная которая хранит адрес. Когда мы пишем
Код:
int *a;
a = new int[10];
то мы выделяем память под массив из 10 элементов. И присваиваем адрес первого элемента указателю. Теперь указатель указывает на первый элемент массива.
MaTBeu вне форума Ответить с цитированием
Старый 16.01.2009, 18:26   #3
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

Тоесть теперь написав так
Код:
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];?
Airou вне форума Ответить с цитированием
Старый 16.01.2009, 18:31   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Присвоение идет как обычному массиву - разыменовывать указатель не нужно.
Код:
a[2] = 10;
a[0][0] = 15;
s = a[0][0];     //именно нули а не буквы о как у вас.
MaTBeu вне форума Ответить с цитированием
Старый 16.01.2009, 18:36   #5
breate
Пользователь
 
Аватар для breate
 
Регистрация: 30.12.2008
Сообщений: 78
По умолчанию RE

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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