реклама на сайте
подробности

 
 
19 страниц V  « < 6 7 8 9 10 > »   
Reply to this topicStart new topic
> Си
sasamy
сообщение Mar 4 2013, 08:59
Сообщение #106


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Tahoe @ Mar 4 2013, 12:22) *
"И о чем нам это должно говорить?" (с)


О том что переводы классиков и сферические примеры только путаницу вносят и судя по всему понимание у вас только на уровне мантр, тогда ка загляни новичек в стандарт языка - там все четко и недвусмысленно описано.
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 4 2013, 09:04
Сообщение #107


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Tahoe @ Mar 4 2013, 09:36) *
Да не обидится ReAl, но объяснять, это отдельное искусство. Знаю много грамотных спецов, однако, дай Б-г, если четверть из них в состоянии внятно объяснить то, чем сами отлично владеют.

Увы, не в объяснении дело. Дело в том, что обсуждение перешло на уровень, который явно не по зубам новичку. Плюс к этому еще перемешали понятия (например - динамический массив из моего примера не имеет никакого отношения к понятию многомерный массив языка С, и не надо их сравнивать rolleyes.gif )

Подробно объяснить что к чему сможет либо разработчик компиляторов, либо автор стандарта С. Но понять его сможет только второй такой же специалист laughing.gif
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Mar 4 2013, 12:24
Сообщение #108


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(XVR @ Mar 4 2013, 13:04) *
обсуждение перешло на уровень, который явно не по зубам новичку

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

Цитата(XVR @ Mar 4 2013, 13:04) *
Подробно объяснить что к чему сможет либо разработчик компиляторов, либо автор стандарта С.

Нет. Объяснить/научить, это совершенно отдельная песня. Мало знать предмет, надо иметь еще навык педагога, если угодно. Одно и то же, можно объяснить разными путями, причем в одном случае, будет сразу все понятно, а в другом - хоть до дыр зачитай, ничего не поймешь.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Mar 4 2013, 12:47
Сообщение #109


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(XVR @ Mar 4 2013, 13:04) *
например - динамический массив из моего примера не имеет никакого отношения к понятию многомерный массив языка С, и не надо их сравнивать rolleyes.gif )

Подробно объяснить что к чему сможет либо разработчик компиляторов, либо автор стандарта С. Но понять его сможет только второй такой же специалист laughing.gif


Тот пример что вы привели не является массивом - ни динамическим ни многомерным, и не надо тут быть разработчиком компиляторов или автором стандартов. Во первых (и самое главное) несколько подряд new не гарантируют непрерывность, во вторых динамичность подразумевает возможность в любое время изменить размер, в третьих С - это не С++ (malloc/realloc), в четвертых в C99 появились variable-length arrays, в пятых в С++ есть std::vector sm.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 4 2013, 17:33
Сообщение #110


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(sasamy @ Mar 4 2013, 16:47) *
Во первых (и самое главное) несколько подряд new не гарантируют непрерывность,
А где там требуется непрерывность?
Цитата
во вторых динамичность подразумевает возможность в любое время изменить размер,
Отнюдь, возможность изенения размера является желательным, а не необходимым свойством.
Цитата
в третьих С - это не С++ (malloc/realloc),
Замените new на malloc, если так будет по феншую rolleyes.gif
Цитата
в четвертых в C99 появились variable-length arrays,
Это есть, признаю.
Цитата
в пятых в С++ есть std::vector sm.gif
Он одномерный. А vector<vector<>> - это вообще монстр (хотя и многомерный laughing.gif )
Go to the top of the page
 
+Quote Post
sasamy
сообщение Mar 4 2013, 18:19
Сообщение #111


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(XVR @ Mar 4 2013, 21:33) *
А где там требуется непрерывность?


Если говорим о С/C++ непрерывность требуется для доступа к элементам массива, цитату из стандарта я вам уже приводил.
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 5 2013, 05:58
Сообщение #112


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(sasamy @ Mar 4 2013, 22:19) *
Если говорим о С/C++ непрерывность требуется для доступа к элементам массива,
Мы не говорим о массиве в понимании С/С++.
Цитата
цитату из стандарта я вам уже приводил.

Тогда тоже приведу цитату -
Цитата
например - динамический массив из моего примера не имеет никакого отношения к понятию многомерный массив языка С, и не надо их сравнивать


Давайте назовем это (то, что было в моем примере) не массив, а 2х мерная динамическая матрица - теперь все довольны? laughing.gif
Go to the top of the page
 
+Quote Post
sasamy
сообщение Mar 5 2013, 08:47
Сообщение #113


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(XVR @ Mar 5 2013, 09:58) *
Мы не говорим о массиве в понимании С/С++.


Странно, в каком понимании тогда говорить о массивах в теме с заголовком "Си" sm.gif с вашего позволения напишу в понимании Си
CODE

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void true_arr(int m, int n)
{
int a[m][n];
int *p = &a[0][0];

for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = i*n + j;
printf("%d\t", p[i*n + j]);
}
puts("");
}

printf("sizeof(a) = %lu\n", sizeof(a));
}

int main(void)
{
srand(time(NULL));
int m = 1 + rand() % 10;
int n = 1 + rand() % 10;

true_arr(m, n);

return 0;
}


результат
CODE

sasa@sasa-laptop:~/tst$ gcc -Wall -std=c99 array.c && ./a.out
0 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
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
sizeof(a) = 200
sasa@sasa-laptop:~/tst$ gcc -Wall -std=c99 array.c && ./a.out
0 1 2 3 4 5 6
sizeof(a) = 28
sasa@sasa-laptop:~/tst$ gcc -Wall -std=c99 array.c && ./a.out
0 1 2 3 4 5 6 7 8 9
sizeof(a) = 40
sasa@sasa-laptop:~/tst$ gcc -Wall -std=c99 array.c && ./a.out
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
sizeof(a) = 96
sasa@sasa-laptop:~/tst$ gcc -Wall -std=c99 array.c && ./a.out
0
1
sizeof(a) = 8
sasa@sasa-laptop:~/tst$ gcc -Wall -std=c99 array.c && ./a.out
0 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
sizeof(a) = 84
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 5 2013, 09:04
Сообщение #114


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(sasamy @ Mar 5 2013, 12:47) *
Странно, в каком понимании тогда говорить о массивах в теме с заголовком "Си" sm.gif
Гм, позволю себе напомнить, о чем вообще идет речь. А идет она об ответе на вот эту фразу -
Цитата
Я вот думаю, что указатель на указатель используется только как формальный аргумент функции. А в качестве фактического аргумента используют адрес простого указателя. Не вижу смысла в использовании указателя на указатель где-то еще.
Вот Я привел пример как его (указатель на указатель) еще можно использовать. Назвал это 'Многомерный динамический массив'. С какого перепугу вы решили, что речь шла об массивах в С мне честно говоря не понятно rolleyes.gif
Цитата
с вашего позволения напишу в понимании Си
И какое отношение это имеет к вопросу о 'применении указателя на указатель'?
Go to the top of the page
 
+Quote Post
sasamy
сообщение Mar 5 2013, 09:33
Сообщение #115


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(XVR @ Mar 5 2013, 13:04) *
Я привел пример как его (указатель на указатель) еще можно использовать. Назвал это 'Многомерный динамический массив'.


Назвать вы про себя можете как угодно, только мысль озвучена неправильно, в контексте Си вы привели пример массива указателей
Цитата
int** rv=new int*[dim1];


Цитата
INT A[10][10];
INT *B[10];

то A и B можно использовать сходным образом в том смысле,
что как A[5][5], так и B[5][5] являются законными ссылками
на отдельное число типа INT. Но A - настоящий массив: под
него отводится 100 ячеек памяти и для нахождения любого ука-
занного элемента проводятся обычные вычисления с прямоуголь-
ными индексами. Для B, однако, описание выделяет только 10
указателей; каждый указатель должен быть установлен так,
чтобы он указывал на массив целых. если предположить, что
каждый из них указывает на массив из 10 элементов, то тогда
где-то будет отведено 100 ячеек памяти плюс еще десять ячеек
для указателей. Таким образом, массив указателей использует
несколько больший объем памяти и может требовать наличие яв-
ного шага инициализации.


заметьте - в K&R нигде не упоминается что это сферический 'Многомерный динамический массив'

Цитата
С какого перепугу вы решили, что речь шла об массивах в С мне честно говоря не понятно rolleyes.gif


в топике прочитал, мысли читать не умею.
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 5 2013, 10:16
Сообщение #116


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(sasamy @ Mar 5 2013, 13:33) *
Назвать вы про себя можете как угодно, только мысль озвучена неправильно,
Вы телепат, умеете читать мысли? Конечно, вырвать из контекста одно слово и объявить всем (в том числе и автору), что именно он имел в виду, а потом объяснить, что это не правильно - это самый лучший способ вести спор. 1111493779.gif

Я еще раз заявляю - тот пример, который я приводил, не имеет отношения к массивам в С, и к K&R тоже.

Цитата
в топике прочитал, мысли читать не умею.
А кроме названия топика не пробовали читать то, на что пытаетесь отвечать? Очень помогает, знаете ли.

За сим спор с вами прекращаю, за бесполезностью. Вы сами придумали за меня, что я имел в виду, а теперь это опровергаете, упорно игнорируя любые попытки добиться взаимопонимания. smile3009.gif

Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 15 2013, 07:52
Сообщение #117


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



ну хорошо, а как правильно обращаться к указателю на который указывает указатель, если я получаю указатель на указатель через формальный параметр в функции? Вот например: есть функция BDD, в параметрах у нее указатель на указатель. Внутри функции мне нужно выделить динамически память под некоторый буфер. Мне разыменовывать получается нужно указатель на указатель для того чтоб получить указатель "первого порядка"?

Код
void BDD (char **a) {  
   free (*a);
   *a = malloc(1000);
   ...
}



int main() {
   char *s = NULL;
   BDD(&s);
...
}


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Mar 15 2013, 09:13
Сообщение #118


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Буратино @ Mar 15 2013, 14:52) *
ну хорошо, а как правильно обращаться к указателю на который указывает указатель,

Да, так. Но можно передавать параметр по ссылке.
В выражениях ссылка разыменовывается автоматически, не надо подсчитывать звёздочки.
Код
void BDDК (char* &ref)
{  
   free (ref);
   ref = malloc(1000);
   ...
}

int main() {
   char *s = NULL;
   BDDR(s);
...
}



--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Mar 15 2013, 09:19
Сообщение #119


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Буратино @ Mar 15 2013, 11:52) *
Код
void BDD (char **a) {  
    free (*a);
    *a = malloc(1000);
    ...
}
А почему не realloc(*a)?

Цитата(SSerge @ Mar 15 2013, 13:13) *
Да, так. Но можно передавать параметр по ссылке.
В выражениях ссылка разыменовывается автоматически, не надо подсчитывать звёздочки.
Код
void BDDК (char* &ref)
{  
    free (ref);
    ref = malloc(1000);
    ...
}
В Си?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 15 2013, 09:58
Сообщение #120


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(andrew_b @ Mar 15 2013, 13:19) *
В Си?
Нет конечно.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

19 страниц V  « < 6 7 8 9 10 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01514 секунд с 7
ELECTRONIX ©2004-2016