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

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

Войти
Регистрация
Восстановить пароль
 
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
#1

НЕ могу разобраться в указателе - C++

18.05.2011, 07:44. Просмотров 612. Ответов 11
Метки нет (Все метки)

Помогите пожалуйста разобраться если у нас есть указатель на указатель например int **P указывает на массив указателей int *p[3] т.е. **P содержит адрес массива указателей p. пусть например будет адрес 0x34. НО что тогда содержится в указателе p? адрес первой ячейки строки точнее столбца?
Миниатюры
НЕ могу разобраться в указателе  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.05.2011, 07:58     НЕ могу разобраться в указателе #2
В данном случан р==Р.
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
18.05.2011, 08:00  [ТС]     НЕ могу разобраться в указателе #3
НО что тогда содержится в указателе p? адрес первой ячейки столбца?
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.05.2011, 08:14     НЕ могу разобраться в указателе #4
Имя статического массива без индексов возвращает адрес своего первого элемента.
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
18.05.2011, 08:19  [ТС]     НЕ могу разобраться в указателе #5
ну т.е. p будет содержать адрес первой ячейки столбца. Просто дело в том что я не могу понять данную функцию
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void matrixsqr(int **a, int N, int M) // Интовая версия
{ 
    
    //r=a+N-1 ставим указатель в самый конец у нас там N строк начиная с нулевой и до (N-1)-ой
 
 int *p, **r; // Указатель
 for (r=a+N-1; r>=a; --r) // Цикл со счётчиком указаетльного типа, перебираем все сктроки матрицы
    {
        for (p=*r+M-1; p>=*r; --p) // Цикл со счётчиком указаетльного типа, перебираем все элементы строки матрицы
        {
        *p=*p*(*p); // Возведение в квадрат умножением.
        }
    }
}
Почему во втором for используется *r со звездой. В первом то понятно потому что r содержит адрес первой строки
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.05.2011, 08:38     НЕ могу разобраться в указателе #6
Звездочка перед указателем означает разыменование, т.е. получение содержимого, на которое указывает указатель.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.05.2011, 08:48     НЕ могу разобраться в указателе #7
Цитата Сообщение от .Malek. Посмотреть сообщение
Помогите пожалуйста разобраться если у нас есть указатель на указатель например int **P указывает на массив указателей int *p[3] т.е. **P содержит адрес массива указателей p. пусть например будет адрес 0x34. НО что тогда содержится в указателе p? адрес первой ячейки строки точнее столбца?
Ты имеешь 13 адресов: девять адресов всех элементов трёх массов интов (три массива по ти инта содержат девять элементов, имеющих девять адресов), три адреса всех элементов массива указаетлей на массивы инов (один массв в три указаетля, имеющих три адреса) и адрес указаетеля на массив указателей. Последний адрес тебе не нужен, это константа, известная только компилятору и операционной системе, так что адресов остаётся 12. В переменной p валяется адрес нулевого элмента массива указателей на массивы интов, а в каждом элменте массива указателей на массивы интов валяется адрес нулевого элемента одного массва интов. Причём, в нулевом элменте массива указаетей на массивы интов валяется адрес нулевого элемента нулевого массива интов, в первом элменте массива указаетей на массивы интов - адрес нулевого элемента первого массива интов, а во втром элменте массива указаетей на массивы интов - адрес нулевого элемента второго массива интов. Итого хранению подлежат четыре адреса только нулевых элементов всех 4-х массивов, а все остальные адреса вычисляются. На сях массивом массивов подменяется многомерный массив.
Baka-buka
Сообщений: n/a
18.05.2011, 13:48     НЕ могу разобраться в указателе #8
Привет всем
А я не могу написать программу с указателями на х и а в функции y=pow(a,2)*sin(x)....
помогите, пожалуйста))))))))))))))
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.05.2011, 11:25     НЕ могу разобраться в указателе #9
Baka-buka, нифига не понял. Задачу в студию.

Добавлено через 2 минуты
.Malek., немного не разглядел. У тебя в каждом массиве интов четыре инта, у них четыре адреса, всего двенадцать, плюс три адреса указателей на массивы интов, плюс адрес указателя на массив указателей на массивы интов, итого 16, нужны 15, хранению подлежат 5.
Baka-buka
Сообщений: n/a
19.05.2011, 18:15     НЕ могу разобраться в указателе #10
Мне нужно в лабе по указателям написать программу, которая бы выводила значение функции y=pow(a,2)*sin(x) с указателями на x и а. Ну правда не знаю, как по-другому сформулировать условие...
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
19.05.2011, 19:23  [ТС]     НЕ могу разобраться в указателе #11
Если я вас правильно понял то вот:
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
#include <iostream.h>
#include <math.h>
#include <conio.h>
 
double function (double *ptr_, double *pt_)
{
     
    double y_=pow(*ptr_, 2)*sin(*pt_);
return y_;
}
 
 
int main()
{
    double a, x; 
    cout<<"Enter a :";  cin>>a;
    double *ptr;
    ptr=&a;
    cout<<"Enter x :";  cin>>x;
    double *pt;
    pt=&x;
    double y=function(ptr, pt);
    cout<<y;
    getch();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 05:26     НЕ могу разобраться в указателе
Еще ссылки по теме:

Аргументы по-умолчанию в указателе на функцию в классе C++
C++ Ошибка в указателе
C++ Не могу разобраться с кодом
Не могу разобраться с сортировками C++
Не могу разобраться с ошибкой C++

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.05.2011, 05:26     НЕ могу разобраться в указателе #12
Ну это ведь можно понять как угодно. Хоть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <math.h>
int main ()
{
 double x, a, y;
 doubpe *px, *pa;
 px=&x;
 pa=&a;
 std::cin>>*px;
 std::cin>>*pa;
 y=pow(a,2)*sin(x);
 std::cout<<y;
 return 0;
}
, хоть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <math.h>
int main ()
{
 double x, a, y;
 doubpe *px, *pa;
 px=&x;
 pa=&a;
 std::cin>>x;
 std::cin>>a;
 y=pow(*pa,2)*sin(*px);
 std::cout<<y;
 return 0;
}
и даже так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <math.h>
int main ()
{
 double *x, *a, y;
 x=new double;
 a=new double;
 std::cin>>*x;
 std::cin>>*a;
 y=pow(*a,2)*sin(*x);
 std::cout<<y;
 return 0;
}
.
Yandex
Объявления
20.05.2011, 05:26     НЕ могу разобраться в указателе
Ответ Создать тему
Опции темы

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