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

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

Войти
Регистрация
Восстановить пароль
 
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
#1

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

11.04.2011, 22:47. Просмотров 677. Ответов 14
Метки нет (Все метки)

Да в конце концов, хочу понять и выучить эти указатели.
Немного понял, но все же проблемы и хочу узнать ваши советы.

практиковался программой(c помощью указателей и функции прога должна вычислить сумму элементов массива.
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void summ_arr(int *p, int *s)
{
     int sum=0;
     for(int i=0;i<*s;i++)
     {
          sum+=*p;
     }
     printf("summ = %d",sum);
}
int main()
{    int x=2;
     int *s;
     s=&x;
     int arr[x];
     srand(time(NULL));
     for(int j=0;j<x;j++)
     {
               arr[j]=rand()%9+1;
               printf(" %d ",arr[j]);
     }
          printf("\n");
int *p;
p=arr;
summ_arr(p,s);
return 0;
}
короче иногда вычисляет верно иногда на единицу больше ответ а иногда вообще хз.

вообщем так. привидите пример как правильно обозначить указатель на одномерный массив, двумерный, и соответственно передать в функцию. я уже заколебался.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2011, 22:47     Указатели.
Посмотрите здесь:

Указатели - C++
Помогите. Код рабочей программы через простое обращение к массиву. нужно чтоб обращение было через адресацию с использованием (&amp; *)...

Указатели - C++
Нужно очень срочно. 1. Дано целое n&gt;2. Напечатать все простые числа из диапазона ; 2. Заданы 3 натуральных числа а,b,c которые...

Указатели - C++
Помогите плиз! Введите с клавиатуры данные в массив целого типа, а затем перепишите их значения в другой массив удвоенной размерности...

Указатели - C++
Наткнулся на вот такой цикл for (char p=str; *p!=(char)0; ++p) ,поясните пожалуйста что значит *p!=(char)0

Указатели - C++
1.Заданы три натуральных числа А, В, С, которые обозначают число, месяц и год. Найти порядковый номер даты, начиная отсчет с начала года. ...

Указатели в С++ - C++
Здравствуйте...требуется помощь по следующей задаче... Задача: Создать функцию, которая возвращает количество элементов массива меньше...

Указатели - C++
int k=5; int *ukaz; ukaz=&amp;k; *ukaz=17; printf(&quot;%o\n&quot;,ukaz); printf(&quot;%o\n&quot;,k); system(&quot;pause&quot;); Может, что то я делаю не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Unforgiven_00
60 / 60 / 2
Регистрация: 12.10.2010
Сообщений: 129
11.04.2011, 22:53     Указатели. #2
Оно кагбе не компилится...
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
11.04.2011, 22:57  [ТС]     Указатели. #3
Unforgiven_00, у тебя компилятор походу отличен от CodeBlocksGNU, если VisualStudio добавь #include "stdafx.h"
neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,904
11.04.2011, 23:01     Указатели. #4
Если в функцию вы отправили адрес первого элемента (в вашем случае arr), а в функции его принимает какой-то указатель, пусть *p, то к элементам можно обращаться так же, как и раньше.
То есть уже в функции:
C++
1
p[0], p[1]
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
11.04.2011, 23:04  [ТС]     Указатели. #5
neske, очень помогло, теперь считает все верно. спасибо. в книге не было написано
Unforgiven_00
60 / 60 / 2
Регистрация: 12.10.2010
Сообщений: 129
11.04.2011, 23:06     Указатели. #6
Цитата Сообщение от instagib Посмотреть сообщение
Unforgiven_00, у тебя компилятор походу отличен от CodeBlocksGNU, если VisualStudio добавь #include "stdafx.h"
проще написать
C++
1
const int x=2;
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,439
11.04.2011, 23:06     Указатели. #7
Можно так:
C++
1
2
3
4
5
     for(int i=0;i<*s;i++)
     {
          sum+=*p;
          p++; 
     }
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
11.04.2011, 23:09  [ТС]     Указатели. #8
короч как я понял, передав указатель на массив arr[x] в фунцкию, в последней можно обращаться как обычно только не arr а p[x];
а как быть с двумерными?
neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,904
11.04.2011, 23:16     Указатели. #9
рад помочь)

Добавлено через 6 минут
Есть два варианта. В случае, если массив динамический, можно передать с помощью двойного указателя (указатель на указатель).
C++
1
2
3
4
void func (int **MAS, int Row, int Column);
//
func (MAS, Row, Column);
//
Или так:
C++
1
2
3
4
void func (int MAS[][Column], int Row);
//
func (MAS, Row);
//
На счет правильности второго варианта 100% гарантии не даю, т.к. сам редко пользуюсь.
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
11.04.2011, 23:52  [ТС]     Указатели. #10
neske, допустим есть массив
x=5; y=10;
arr[x][y];, то как его правильно передать и использовать *
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,439
11.04.2011, 23:55     Указатели. #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void summ_arr(int p [3] [5]){
 printf("%d", p [2] [4]);
}
 
int main() {
 int array [3] [5];    
 array [2] [4]= 67;
 summ_arr(array);
 getchar ();
return 0;
}
Вот так.
А если заранее не знаешь сколько строк у тебя будет и столбцов, то по-другому всё, это читай про динамическое выделение памяти.
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
12.04.2011, 00:14  [ТС]     Указатели. #12
kravam, мне не надо передавать в функцию весь массив. а если например числа будут огромные и массив огромный?....
только и только указатели меня интересуют.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,439
12.04.2011, 00:36     Указатели. #13
Хм, а в книгах пишут, что при такм синтаксисе в функцию передаются именно УКАЗАТЕЛЬ на массив
Проверяй, адреса элементов одинаковы, что в вызывающей, что в вызываемой функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void summ_arr(int p [3] [5]){
 printf("%d\n", p [2] [4]);
 printf("%x", &p [2] [4]);
 
}
 
int main() {
 int array [3] [5];    
 array [2] [4]= 67;
 printf("%x\n", &array [2] [4]);
 summ_arr(array);
 getchar ();
return 0;
}
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
12.04.2011, 01:10  [ТС]     Указатели. #14
Цитата Сообщение от kravam Посмотреть сообщение
int p [3] [5]

kravam, это разве указатель? :O

Добавлено через 1 минуту
в любом случае спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2011, 01:16     Указатели.
Еще ссылки по теме:

Указатели!! - C++
Пользователь вводит строку с клавиатуры - предложение с пробелами и знаками пунктуации длиной до 100 символов. Вывести на экран все знаки...

Указатели С - C++
Объясните пожалуйста как получается что запись типа *(1+data) эквивалентна записи 1. Как из data получается *(1+data) и *(data+1)...

указатели - C++
Вот собственно код, проблема в том что я непойму как он работает, что именно непонятно указал в комментариях unsigned char **...

Указатели - C++
например мы имеем данный кусок кода char str=&quot;eto prostoi test&quot;; char *start; start=str; cout&lt;&lt;start; *start='b'; ...

указатели - C++
Здравствуйте! Ребят , вы не могли бы объяснить некоторые нюансы ,связанные с указателями, недалекому человеку? допустим: int N; ...


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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,439
12.04.2011, 01:16     Указатели. #15
Не суть. Важно, что это с точки зрения КОМПИЛЯТОРА

C++
1
printf ("stroka");
Разве "stroka" это указатель? Нет, это массив символов. Но компилятор хитрый, он строку поместит хер знает куда, а вместо "stroka" положит в стек (все аргументы перед вызовом функции кладутся в область памяти, называемую стеком, откуда функция их и берёт после вызова) именно УКАЗАТЕЛЬ на эту строку.

Также и тут вместо абстрактного int p [3] [5] в стек положится именно УКАЗАТЕЛЬ на массив

(Особняком стоит вопрос- что представляет из себя указатель на массив в данном случае. То ли это указатель на нулевой элемент, то ли ещё что, раньше я разбирался с этим, а щас подзабыл уже. Но неважно. Указатель на массив и всё. А хочешь- углубись. Хотя не знаю, почему тебя не убедил вывод адресов элементов в вызываемой ми вызывающей функции)
Yandex
Объявления
12.04.2011, 01:16     Указатели.
Ответ Создать тему
Опции темы

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