Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.65
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
#1

Как использовать указатели при работе с массивами? - C++

28.11.2011, 16:03. Просмотров 6483. Ответов 111
Метки нет (Все метки)

подскажите пожалуйста как правильно использовать указатели при работе с массивами. Как написать этк программу используя указатели?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 #include<iostream>
 using namespace std;
 const int n = 10;
 int main()
 {
 int X[n] = {1,2,3,4,5,6,7,8,9,10};
 int Y[n]= {2,3,4,6,7,3,4,5,1,9,};
 int Z[n]= {1,2,3,4,5,6,7,8,9,0};
 int U[n];
 for (int i = 0; i < n; i++)
 {
 U[i]=X[i]+Y[i]-Z[i];
 cout<<U[i]<<" ";
 }
 cout << endl;
 system("pause");
 }
если я правильно понял *X - это тоже самое, что и X[0] , а как написать при помощи указателей к примеру X[4]и т.п.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 16:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как использовать указатели при работе с массивами? (C++):

Указатели при работе с одномерными и двумерными массивами - C++
Помогите Даны натуральное число n, целые числа а1,...,аn . Выяснить, имеется ли среди чисел а1,...,аn совпадающие.

Проблемма при работе с массивами структур - C++
Разработать программу , позволяющую добавлять данные структур с указанными полями в массив, просматривать массивы, а также выполнять...

Ошибка при работе с массивами char - C++
Задание: написать функцию для сложения целых двоичных чисел. Слагаемые должны иметь тип unsigned char. Вот что получилось, но после...

Не получается перегрузить оператор ++ при работе с массивами - C++
Текст: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class array { public: array(); ...

Ошибка с памятью при работе с двумерными массивами. - C++
{ int i, j, c, kol; n=StrToInt(Edit1-&gt;Text); m=StrToInt(Edit2-&gt;Text); for(i=0; i&lt;n; i++) { for(j=0; j&lt;m; j++)...

Ошибка в перегрузке оператора - при работе с массивами - C++
Текст программы: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class array { public: array(); ...

111
alkagolik
Заблокирован
30.11.2011, 02:37 #46
Цитата Сообщение от easybudda Посмотреть сообщение
C
1
2
3
4
5
6
7
#include <stdio.h>
int main(void)
{ 
    int arr[100], * ptr = arr;
    printf("%d\n%d\n", sizeof(arr), sizeof(ptr));
    return 0;
}
мне кажется вы немного лукавите.
0
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
30.11.2011, 11:11 #47
Вот здесь достаточно понятно все расписано про явные и неявные указатели.
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
30.11.2011, 11:35 #48
Цитата Сообщение от Bers Посмотреть сообщение
Кстати, всегда думал, что "массив" на с++ это и есть указатель на первый элемент массива.
Так и есть, но за исключением понимания массива функцией sizeof. Поэтому не сам указатель, а сущность, с которой этот указатель ассоциирован, а кроме него с той же сущностью ассоциировано количество элементов массива.
0
Сыроежка
Заблокирован
30.11.2011, 11:59 #49
Цитата Сообщение от taras atavin Посмотреть сообщение
Так и есть, но за исключением понимания массива функцией sizeof. Поэтому не сам указатель, а сущность, с которой этот указатель ассоциирован, а кроме него с той же сущностью ассоциировано количество элементов массива.
Могу лишь сказать, что написана полная глупость человека, который не знает, что такое массивы. Вы бы хоть посмотрели пример, который я здесь привел выше, прежде, чем писать свою глупость.
0
Bers
Заблокирован
30.11.2011, 14:20 #50
Гоблин, там достаточно понятно написанно, потому что очень много вольностей допущено в изложении) От простого к сложному)

Допустим, вот эта фраза не корректная "указатель - переменная, содержащая информацию о расположении в памяти другой переменной"(ц)

То есть, материал преподносится так, что бы читатель, который не в теме, сумел понять)

На самом деле, указатель - это не всегда переменная.
Но всегда он содержит адрес. Причем, никаких "переменных" по этому адресу не живёт. А живет там тупо кучка какие то байтов.
О том, что именно там на самом деле живет, знает либо программист. Либо тип самого указателя, который хранит этот адрес.

Но если сразу писать корректно-точно, то материал получится настолько сложный, что новичку будит очень трудно понять, что это за хрень вообще такая.


Вот тебе банальный пример:

C++
1
2
3
4
5
char* text = "Привет, мир!"; //в правой части мы имеем неявное 
                                          //преобразование литерной константы,
                                          // сначала к массиву, а затем и к указателю.
//Но в правой части нет никаких явных указателй
//И нет никаких переменных. А вот неявный указатель есть

C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    char* Ptr = "ghbdtn"; //только не понятно, 
                                    //почему студия разрешает 
                                   //такое делать
 
    Ptr[0]='t'; //ведь можно сделать вот так, 
                   //и получить крэш
    
    EndProgramm();
}
0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.11.2011, 14:30 #51
Цитата Сообщение от Bers Посмотреть сообщение
На самом деле, указатель - это не всегда переменная.
Цитата Сообщение от Bers Посмотреть сообщение
char* text
А это разве не переменная?
0
Bers
Заблокирован
30.11.2011, 14:39 #52
Цитата Сообщение от fasked Посмотреть сообщение
А это разве не переменная?
переменная.

"Привет мир" - это разве переменная?
0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.11.2011, 14:51 #53
Bers, происходит array-to-pointer conversion, в результате указатель хранит адрес первого элемента массива, который (первый элемент) является переменной.
0
Bers
Заблокирован
30.11.2011, 14:54 #54
Цитата Сообщение от fasked Посмотреть сообщение
Bers, происходит array-to-pointer conversion, в результате указатель хранит адрес первого элемента массива, который (первый элемент) является переменной.
Ну да. Вот этот вот неявный указатель с правой стороны, который появился благодаря неявным преобразованиям.

Вот он будет ли являться переменной? Или не будет?

Как минимум, этот временный объект не будет являться переменной, потому что будет являться константным.


Единственное, этот первый элемент не будет являться переменной. Это будет всего лишь какой то безымяный байт. Попытаетесь изменить - получите крыш
0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.11.2011, 15:18 #55
A variable is introduced by the declaration of a reference other than a non-static data member or of an object. The variable’s name denotes the reference or object.
Примерно так
0
easybudda
Модератор
Эксперт CЭксперт С++
9917 / 5840 / 976
Регистрация: 25.07.2009
Сообщений: 11,014
30.11.2011, 15:31 #56

Не по теме:

Цитата Сообщение от Bers Посмотреть сообщение
Ну да...
Никогда не думай, что ты иная, чем могла бы быть, иначе, чем будучи иной в тех случаях, когда иначе не быть нельзя!
(с) Л. Кэррол feat. С. Маршак
Напомнило...


Bers, охота Вам лезть в такие дебри и запутывать себя и окружающих? Строковый литерал - это последовательность байт в памяти, начинающаяся с определённого адреса. Вот именно этот адрес и становится значением переменной-указателя. Обе строки выводятся с одинаковым успехом:
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
    
int main(void){
    const char * p1 = "Hello, world!";
    const char * p2 = &("Goodbye, world!"[0]);
    
    printf("%s\n%s\n", p1, p2);
    
    return 0;
}
1
Bers
Заблокирован
30.11.2011, 15:45 #57
Цитата Сообщение от easybudda Посмотреть сообщение
Bers, охота Вам лезть в такие дебри и запутывать себя и окружающих? Строковый литерал - это последовательность байт в памяти, начинающаяся с определённого адреса. Вот именно этот адрес и становится значением переменной-указателя. Обе строки выводятся с одинаковым успехом:
Да, именно так. Если по простому. И если не вникать в "закулисную" кухню с++.
А тем не менее, знание этой самой закулисной кухни в определённых ситуациях может дать определённый профит. Например - сэкономить на копирующих конструкторах.

А правило то на самом деле простое:

some1 obj1 = some2 obj2;

Гибкость С++ в том, что он позволяет твердому присваивать мягкое.
Однако! На самом деле твердому можно присвоить только твёрдое.
В случае любых несоответствий правая часть всегда будит неявно приведена к типу данных левой части. А что там именно за скрытые преобразования будут происходить - это уже от ситуации зависит.
0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.11.2011, 15:47 #58
Цитата Сообщение от Bers Посмотреть сообщение
Гибкость С++ в том, что он позволяет твердому присваивать мягкое.
Однако! На самом деле твердому можно присвоить только твёрдое.
Это Вы так строгую типизацию называете?
0
Bers
Заблокирован
30.11.2011, 15:51 #59
Цитата Сообщение от fasked Посмотреть сообщение
Это Вы так строгую типизацию называете?
Как? "так" ?
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
30.11.2011, 15:52 #60
Ну твёрдости присвоить "мягко" - не фокус. Плюсы же позволяют твёрдости присвоить зелень, а температуре - алмаз. Причём, автор мнимых граблей полиморфизма и все, кто в эти грабли поверил, будут в обоих случаях юзить преобразование запаха в химическую формулу, что в корне не верно, но язык то в том не виноват.
0
30.11.2011, 15:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2011, 15:52
Привет! Вот еще темы с ответами:

Использование функций при работе с двумерными массивами - C++
Дана прямоугольная вещественная матрица . Обнулить все четные столбцы и нечетные строки. В полученной матрице отсортировать по возрастанию...

Использование указателей при работе с одномерными массивами - C++
Реализовать на Си. Даны натуральное число n, действительные числа a1,...,an. Если последовательность a1,...,an упорядочена по...

Указатели при работе со строками char* - C++
Помогите разобраться с указателями #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; int main() { char*...

Как работают указатели с массивами - C++
Хочу на простом примере перестановки двух элементов уяснить - как работают указатели с массивами, но ничего не получается. Объясните на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru