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

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

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

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

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

Помогите пожалуйста разобраться если у нас есть указатель на указатель например int **P указывает на массив указателей int *p[3] т.е. **P содержит адрес массива указателей p. пусть например будет адрес 0x34. НО что тогда содержится в указателе p? адрес первой ячейки строки точнее столбца?
0
Миниатюры
НЕ могу разобраться в указателе  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2011, 07:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос НЕ могу разобраться в указателе (C++):

Не могу измерить размер массива в указателе - C++
Вообщем, много раз разные вещи перебирал, и решил тут спросить. string *help=new string; help="dasd"; help="24"; Как мне...

Ошибка в указателе - C++
Необработанное исключение по адресу 0x6F274F98 (msvcr110d.dll) в Динамическая матрица.exe: 0xC0000005: нарушение прав доступа при чтении по...

Ошибка в указателе на последний элемент - C++
Есть код: #include <cstdlib> #include <iostream> #include <ctime> using namespace std; struct node { int...

Аргументы по-умолчанию в указателе на функцию в классе - C++
В классе создал указатель на функцию void set_window_style(void(*style)(char, char)); Вот сам метод void...

Ошибка в указателе при работе со списком - C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include <cstdio> #include <cstring> #include"string.h" using...

Конвертация типа или как сэкономить на указателе? - C++
Везде, где только могу, использую ссылающийся тип, чтобы лишний раз не создавать экземпляры, а просто давать "новое имя" имеющимся....

11
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
18.05.2011, 07:58 #2
В данном случан р==Р.
0
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
18.05.2011, 08:00  [ТС] #3
НО что тогда содержится в указателе p? адрес первой ячейки столбца?
0
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
18.05.2011, 08:14 #4
Имя статического массива без индексов возвращает адрес своего первого элемента.
0
.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 содержит адрес первой строки
0
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
18.05.2011, 08:38 #6
Звездочка перед указателем означает разыменование, т.е. получение содержимого, на которое указывает указатель.
0
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-х массивов, а все остальные адреса вычисляются. На сях массивом массивов подменяется многомерный массив.
1
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.
1
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;
}
0
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;
}
.
0
20.05.2011, 05:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 05:26
Привет! Вот еще темы с ответами:

Не могу разобраться с С++ - C++
Всем Привет, так я кодеру в Делфи. Не давно нашел что мне нужно но оy написан на С. Вот и начался у меня проблемы с кодами. Вот часть...

не могу разобраться.. - C++
Вывести на экран все натуральные числа из диапазона от A до B, в записи которых цифра 7 встречается ровно N раз. При отсутствии чисел с...

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

Не могу разобраться с ошибкой - C++
Всю голову переломал почему он ругается на cout в 11 строке. Подскажите пожалуйста. #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include...


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

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

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