powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / указатель на массив. что это такое ?
25 сообщений из 158, страница 3 из 7
указатель на массив. что это такое ?
    #39969233
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab
вот как это работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#include <stdio.h>

int main() {
	int mat[3][5];

	for (int i = 0; i<3; i++) {
		for (int j=0; j<5; j++) {
			mat[i][j] = i*10 + j;
		}
	}

	int (*a)[5];
	a = mat;
	//a = &mat[0]; //works as well

	for (int i=0; i<3; i++) {
		for (int j = 0; j<5; j++) {
			printf("%4d ", *(*(a+i) +j) );
		}
		printf("\n");
	}
}


и я еще раз повторю, что нужно различать указатель на массив от массива указателей
Вопрос на засыпку. А так можно?:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include <stdio.h>

int main() {
	int mat[3][5];

	for (int i = 0; i<3; i++) {
		for (int j=0; j<5; j++) {
			mat[0][i*5 + j] = i*10 + j;
		}
	}

	// дальше как было
}
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969236
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
а тут petrav объясняет почему так происходит
petrav

Да ты пойми простую вещь. Есть тип. Неважно что это за тип: int, структура или массив. У тебя есть указатель на переменную этого типа. Понятно, что этот указатель по факту содержит указатель на первую переменную в этом типе. По факту! Но по сути он содержит указатель на этот тип. Точнее на переменную этого типа.


мне сложно понять простую вещь.
смотрите разбираем, что написал этот товарищ, (пишу его перефразированные цитаты жирным) :
пусть все же массив это тип. в чем у меня сомнения ну да ладно. пусть тип.
у меня есть указатель на переменную этого типа.

ок. съели.

этот указатель по факту содержит указатель на первую переменную в этом типе
вот это я с трудом, но понял. видимо имелось ввиду , что этот указатель на первый элемент массива.

но в то же время он является и указателем на int
и это понято . ведь массив это по сути совокупность переменных хранящихся рядом в памяти (благодаря этому доступна арифметика указателей)

так а где тут объяснение , что это не работает ?

Код: plaintext
1.
2.
3.
4.
 int f[5] = { 1,2,3,4,5 };
    int(*a)[5];
    a = &f[0];
    a = f;



здесь a это указатель на int ? указатель ! а f указатель на int , тоже указатель
почему не прокатывает это:
a = f;
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969242
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
мне сложно понять простую вещь.

Бывает.

andron81

Код: plaintext
1.
2.
3.
4.
 int f[5] = { 1,2,3,4,5 };
    int(*a)[5];
    a = &f[0];
    a = f;



здесь a это указатель на int ? указатель ! а f указатель на int , тоже указатель
почему не прокатывает это:
a = f;

Здесь "a" — это указатель на массив. А "f" — это массив.

А не прокатывает потому что вы указателю на массив пытаетесь присвоить массив. Переменная типа массив может неявно привестись только к указателю на элемент массива и всё.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969247
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

Переменная типа массив может неявно привестись только к указателю на элемент массива и всё.


вот !

здесь нет это преобразования :

a = f;

???
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969253
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
petrav

Переменная типа массив может неявно привестись только к указателю на элемент массива и всё.


вот !

здесь нет это преобразования :

a = f;

???

Нет. Потому что `a` — это указатель на массив, а не на элемент этого массива.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969259
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81, посмотри пример под спойлером в этом сообщении 22136952 . Возможно станет чуточку понятней.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969263
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
andron81
пропущено...


вот !

здесь нет это преобразования :

a = f;

???

Нет. Потому что `a` — это указатель на массив, а не на элемент этого массива.



блин, да о каком элементе . о чем вы ? или я тупой или вы себе противоречите :
вот же вы писали :

Есть тип. Неважно что это за тип: int, структура или массив. У тебя есть указатель на переменную этого типа. Понятно, что этот указатель по факту содержит указатель на первую переменную в этом типе. По факту! Но по сути он содержит указатель на этот тип. Точнее на переменную этого типа.


укзатель на массив и указатель на первый элемент массива это разные вещи ???
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969269
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Я имел ввиду, что указатель на массив содержит адрес первого элемента массива, в числовом виде. Просто номер ячейки памяти. Но с точки зрения системы типов указатель на массив — это не адрес первого элемента массива. Так же массив — это тоже не адрес первого элемента массива.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969284
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81


так а где тут объяснение , что это не работает ?

Код: plaintext
1.
2.
3.
4.
 int f[5] = { 1,2,3,4,5 };
    int(*a)[5];
    a = &f[0];
    a = f;




дело в том, что вы не хотите воспринимать определения!
Определения:
указатель на массив - это указатель на массив, и он указывает на массив
указатель на целое число - это указатель на целое число, и он указывает на целое число

вместо того, чтобы просто взять и использовать определение, вы начинаете придумывать что-то свое:
здесь a это указатель на int ? указатель ! а f указатель на int , тоже указатель
почему не прокатывает это:
a = f;

нет не верно!
a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое число

вот поэтому и не прокатывает
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969289
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Вопрос на засыпку. А так можно?:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include <stdio.h>

int main() {
	int mat[3][5];

	for (int i = 0; i<3; i++) {
		for (int j=0; j<5; j++) {
			mat[0][i*5 + j] = i*10 + j;
		}
	}

	// дальше как было
}


1)
нет нельзя, но это личное мнение и с ним можно не соглашатся :-)
в данном случае код написан некорректно, и вводит в заблуждение тех, кто будет читать/разбирать этот код.
2)
в gcc все прекрасно откомпилируется и будут получены те же результаты
в данном случае я с gcc не согласна, но принимаю точку зрения разработчиков gcc
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969293
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF: Особенно злая шутка товарищей Кернигана и Риччи состоит в том, что выражение arr[i,j]
компилируется без ошибок и даже предупреждений, но, конечно же, не работает так, как
ожидает человек, видевший синтаксис Бейсика или Паскаля.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969297
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab
a guest
Вопрос на засыпку. А так можно?:
1) нет нельзя, но это личное мнение
Я не про мнение спрашивал, а определено ли поведение с точки зрения стандарта. Пардон, если сразу было не ясно.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969298
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab

a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое число
вот поэтому и не прокатывает


в общем ещё раз пролистал тему адресная арифметика. нету там такого прикола как указатель на массив. это определение вводится позже. то есть f это указатель на какой-либо элемент массива(например на первый) ну и соответственно указатель на целое число.

Из чего делаю вывод , что указатель на массив и указатель на первый (или n-ый элемент) это разные понятия.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969302
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Из чего делаю вывод , что указатель на массив и указатель на первый (или n-ый элемент) это разные понятия.
Конечно разные!
И если ты посмотрел пример под спойлером в этом 22136952 комментарии, то должен был понять чем они отличаются, но фактически, указатель на массив и указатель на первый элемент массива, хоть и имеют разные типы, будут содержать один и тот же адрес, а следовательно, возможно явное приведение одного к другому.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969303
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab
вместо того, чтобы просто взять и использовать определение, вы начинаете придумывать что-то свое:
здесь a это указатель на int ? указатель ! а f указатель на int , тоже указатель
почему не прокатывает это:
a = f;


нет не верно!
a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое числонет не верно!
a — указатель на массив, а f это выражение, обозначающее массив. Которое преобразуется к указателю на первый элемент обознчаемого массива.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969304
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
указатель на массив и указатель на первый элемент массива, хоть и имеют разные типы, будут содержать один и тот же адрес
В цепепе это, кстати, не гарантируется.
Возможно, зря я про такое рассказываю. Сейчас понабегут 1C-ники, дельфисты и прочие программисты на HTML и начнётся такой хай...
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969306
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, и "a" и "f" являются выражениями.
Выражение "a" (lvalue) будет расценено как указатель на массив, а выражение "f" (prvalue) будет расценено как ссылка на массив.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969307
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
mini.weblab

a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое число
вот поэтому и не прокатывает


в общем ещё раз пролистал тему адресная арифметика. нету там такого прикола как указатель на массив. это определение вводится позже. то есть f это указатель на какой-либо элемент массива(например на первый) ну и соответственно указатель на целое число.

Из чего делаю вывод , что указатель на массив и указатель на первый (или n-ый элемент) это разные понятия.

Забей, это тебе не нужно, учи Питон.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969309
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest

mini.weblabнет не верно!
a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое число


нет не верно!
a — указатель на массив, а f это выражение, обозначающее массив. Которое преобразуется к указателю на первый элемент обознчаемого массива.
в строке кода
a = f
f - это указатель на целое число
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969312
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
В цепепе это, кстати, не гарантируется.
Гарантируется!
Читай раздел "The C++ object model" до просветления.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969314
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
Выражение "a" (lvalue) будет расценено
Запишись на курсы по английскому, расценивальщик.
rdb_dev
"f" (prvalue) будет расценено как ссылка на массив.
"f" не prvalue и не ссылка.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969319
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, мне нет резона в который раз вступать в полемику с тем, что читает стандарт С++ исключительно по диагонали.
Просто оставлю тут пару ссылок:
1. 22136626
2. 6.10 Lvalues and rvalues
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969323
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
a guest, мне нет резона в который раз вступать в полемику с тем, что читает стандарт С++ исключительно по диагонали.
Просто оставлю тут пару ссылок:
1. 22136626
2. 6.10 Lvalues and rvalues
ШУЕ, хватит кидаться в меня рандомными ссылками.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969329
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Я не про мнение спрашивал, а определено ли поведение с точки зрения стандарта. Пардон, если сразу было не ясно.

нет не ясно:
1) если вам интересно, что написано в стандарте, то нужно прочитать, что там написано
2) если вам интересно, что я думаю, то нужно спросить у меня
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969331
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, может ты не по англицки вообще не понимаешь или же просто не способен собрать единое представление из нескольких частей определения?

- A glvalue is an expression whose evaluation determines the identity of an object, bit-field, or function.
...
- An lvalue is a glvalue that is not an xvalue.
...
Рейтинг: 0 / 0
25 сообщений из 158, страница 3 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / указатель на массив. что это такое ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]