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

Представте что мы с вами доказываем теорему Пифагора.

И в качестве доказательсва Алексей Роза берет рисует
треугольники и меряет их линейкой с погрешностью
и потом перемножает и складывает чтоб доказать что
формула Пифагора близка.

Такой... подход физика-экспериментатора.

Я не знаю. Мне такой подход не нравится. Он - не с той стороны.

Он к спецификации языка вообще не имеет отношения.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969856
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы, господа, вообще зря вводите понятие "указатель на массив". Потому как этот указатель ничем не отличается от указателя на int, например, или на структуру. Но введение такого понятия у людей (со слабой морально-политической подготовкой) совсем сносит крышу и всё путает в голове. Приводит к попыткам придумывать какие-то совершенно лишние теории и псевдо-логические конструкции.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969858
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
Вы, господа, вообще зря вводите понятие "указатель на массив". Потому как этот указатель ничем не отличается от указателя на int, например, или на структуру.
Отличается типом.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969859
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
petrav
Вы, господа, вообще зря вводите понятие "указатель на массив". Потому как этот указатель ничем не отличается от указателя на int, например, или на структуру.
Отличается типом.

Типом конечно. Указатели на массив, структуру, int и char отличаются только типом на который указывают. Но смысл и назначение одинаковые.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969866
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Наш вопрос топика - теоретический.

Представте что мы с вами доказываем теорему Пифагора.

И в качестве доказательсва Алексей Роза берет рисует
треугольники и меряет их линейкой с погрешностью
и потом перемножает и складывает чтоб доказать что
формула Пифагора близка.

Такой... подход физика-экспериментатора.

Я не знаю. Мне такой подход не нравится.
То тебе не нравится когда в стандарт лазают (насколько я помню), то когда не лазают.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969874
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
mayton
Наш вопрос топика - теоретический.

Представте что мы с вами доказываем теорему Пифагора.

И в качестве доказательсва Алексей Роза берет рисует
треугольники и меряет их линейкой с погрешностью
и потом перемножает и складывает чтоб доказать что
формула Пифагора близка.

Такой... подход физика-экспериментатора.

Я не знаю. Мне такой подход не нравится.
То тебе не нравится когда в стандарт лазают (насколько я помню), то когда не лазают.

Мы уже 5 страниц занимаемя анонизмом простого вопроса.

Если его можно прекратить простой ссылкой на док - то прошу тех кто знает
- дайте ссылку и мы закроем эту тему.

Для меня вопрос выеденного яйца не стоит. Тоетсь я не понимаю почему Сишники должны 5 страниц
ломать копья вокруг пустяка. Дайте тестовый кейс и мы его проверим. Это подход практики.
И я всегда так и делаю. Но здесь нет этого кейса. Здесь автор ковыряет грязь из пупка.
Или между пальцев ног. Зачем? Какой повод?

И я уже согласен зайти в теорию просто чтобы это прекратить.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969878
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
a guest
пропущено...
То тебе не нравится когда в стандарт лазают (насколько я помню), то когда не лазают.

Мы уже 5 страниц занимаемя анонизмом простого вопроса.

Если его можно прекратить простой ссылкой на док - то прошу тех кто знает
- дайте ссылку и мы закроем эту тему.

Для меня вопрос выеденного яйца не стоит.
Указатель на массив это указатель на массив. Full stop.
mayton
Тоетсь я не понимаю почему Сишники должны 5 страниц ломать копья вокруг пустяка.
Если бы тут были только сишники, то, я думаю, копья особо бы не ломались. Но понабижали асучиватели складов и шизики и пишут всякую херню.
mayton
Дайте тестовый кейс и мы его проверим.
Как должен выглядить тестовый кейс, отвечающий на вопрос "что такое указатель на массив"?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969881
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest

Как должен выглядить тестовый кейс, отвечающий на вопрос "что такое указатель на массив"?

Это очень правильный вопрос. Я добавлю. Зачем нам вообще обсуждать тему для которой
программист не может придумать кейса.

Это знаете как ребенку объяснить сложное явление на пальцах. Если мы можем объяснить - то сами
понимаем. И эта сущность имеет смысл в нашем материальном мире.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969882
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
a guest

Как должен выглядить тестовый кейс, отвечающий на вопрос "что такое указатель на массив"?

Это очень правильный вопрос. Я добавлю. Зачем нам вообще обсуждать тему для которой
программист не может придумать кейса.
Похоже, у тебя профдеформация тестера.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969883
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
mayton
пропущено...

Это очень правильный вопрос. Я добавлю. Зачем нам вообще обсуждать тему для которой
программист не может придумать кейса.
Похоже, у тебя профдеформация тестера.

Может быть это просто умение посмотреть на ситуацию со стороны?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969885
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guestКак должен выглядить тестовый кейс, отвечающий на вопрос "что такое указатель на массив"?

Он должен включать в себя переменную, которая демонстрирует все свойства указателя на
нечто, соответствующее массиву. Как минимум в части операторов ++, -- и * и так далее (на
случай если я пропустил какой-то оператор, применимый к "чистому" указателю, то бишь без
предварительных неявных преобразований).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969886
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Типом конечно. Указатели на массив, структуру, int и char отличаются только типом на который указывают. Но смысл и назначение одинаковые.
Нет.
sizeof(*указатель_на_массив) даст размер массива в байтах, а sizeof(*указатель_на_int) вернёт размер int.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969891
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, тут всё просто!
Оператор ++ к указателю на массив увеличит указатель на размер массива, а к указателю на int увеличит указатель на размер int.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969892
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
Типом конечно. Указатели на массив, структуру, int и char отличаются только типом на который указывают. Но смысл и назначение одинаковые.
Нет.
sizeof(*указатель_на_массив) даст размер массива в байтах, а sizeof(*указатель_на_int) вернёт размер int.

Вы это специально что ли пишите? Вот эту вот ерунду?! Или вы в натуре не понимаете, что разыменование указателя просто приводит к типу на который указывает этот указатель? То что вы привели в качестве примеров по сути одинаковое. Это указатели на некий тип.

Почему вы обсуждаете понятие "указатель на массив", но не обсуждаете понятие "указатель на int"?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969895
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, потому что обсуждать размер указателя глупо, так как он всегда один и тот же, независимо от типа объекта, на который он указывает. Исключение может составлять только указатель на виртуальный метод в зависимости от реализации C++.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969896
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devтут всё просто!
Оператор ++ к указателю на массив увеличит указатель на размер массива
Вот именно. Если в показанном примере это наблюдается, то да - это указатель на массив. Не
наблюдается - какая-то фигня.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969900
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav, потому что обсуждать размер указателя глупо, так как он всегда один и тот же, независимо от типа объекта, на который он указывает. Исключение может составлять только указатель на виртуальный метод в зависимости от реализации C++.

А зачем вы обсуждаете размер указателя? Это что блин такое открытие что sizeof(*указатель) может вернуть разные значения?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969937
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, тогда уточни - что именно ты хочешь обсудить про указатели.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969984
a guest
Указатель на массив это указатель на массив. Full stop.

да щас, stop. Там уже была тема на неск.страниц, где обсуждали, что же это за зверь - указатель на массив...
а воз и ныне там
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969989
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сделаю 1 эксперимент. Маленький сорс.

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

//using namespace std;

int main(int argc, char **argv, char **env) {
  //vector<int> q{ 13, 17, 19 };
  int x[] = { 2,3,5,7,11 };
  int *y = new int[6];
  int *z = y;
  int *w = y + 1;
  int (*a)[5];
  int* b;
  printf("OK!");
  delete[] y;
  return 0;
}



И его вид с точки зрения ассемблера для GCC/Linux (там операнды перевернуты местами - это норм. Вот такой он странный)
Код: plaintext
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.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
	.file	"massiv.cpp"
	.text
	.section	.rodata
.LC0:
	.string	"OK!"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$96, %rsp
	movl	%edi, -68(%rbp)
	movq	%rsi, -80(%rbp)
	movq	%rdx, -88(%rbp)
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	movl	$2, -32(%rbp)
	movl	$3, -28(%rbp)
	movl	$5, -24(%rbp)
	movl	$7, -20(%rbp)
	movl	$11, -16(%rbp)
	movl	$24, %edi
	call	_Znam@PLT
	movq	%rax, -56(%rbp)
	movq	-56(%rbp), %rax
	movq	%rax, -48(%rbp)
	movq	-56(%rbp), %rax
	addq	$4, %rax
	movq	%rax, -40(%rbp)
	leaq	.LC0(%rip), %rdi
	movl	$0, %eax
	call	printf@PLT
	cmpq	$0, -56(%rbp)
	je	.L2
	movq	-56(%rbp), %rax
	movq	%rax, %rdi
	call	_ZdaPv@PLT
.L2:
	movl	$0, %eax
	movq	-8(%rbp), %rcx
	xorq	%fs:40, %rcx
	je	.L4
	call	__stack_chk_fail@PLT
.L4:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0"
	.section	.note.GNU-stack,"",@progbits



И его вид с точки зрения ассемблера для Low Level Virtual Machine (компиллятор Clang).

Код: plaintext
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.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
; ModuleID = 'massiv.cpp'
source_filename = "massiv.cpp"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@_ZZ4mainE1x = private unnamed_addr constant [5 x i32] [i32 2, i32 3, i32 5, i32 7, i32 11], align 16
@.str = private unnamed_addr constant [4 x i8] c"OK!\00", align 1

; Function Attrs: noinline norecurse optnone uwtable
define i32 @main(i32, i8**, i8**) #0 {
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i8**, align 8
  %7 = alloca i8**, align 8
  %8 = alloca [5 x i32], align 16
  %9 = alloca i32*, align 8
  %10 = alloca i32*, align 8
  %11 = alloca i32*, align 8
  %12 = alloca [5 x i32]*, align 8
  %13 = alloca i32*, align 8
  store i32 0, i32* %4, align 4
  store i32 %0, i32* %5, align 4
  store i8** %1, i8*** %6, align 8
  store i8** %2, i8*** %7, align 8
  %14 = bitcast [5 x i32]* %8 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* bitcast ([5 x i32]* @_ZZ4mainE1x to i8*), i64 20, i32 16, i1 false)
  %15 = call i8* @_Znam(i64 24) #5
  %16 = bitcast i8* %15 to i32*
  store i32* %16, i32** %9, align 8
  %17 = load i32*, i32** %9, align 8
  store i32* %17, i32** %10, align 8
  %18 = load i32*, i32** %9, align 8
  %19 = getelementptr inbounds i32, i32* %18, i64 1
  store i32* %19, i32** %11, align 8
  %20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0))
  %21 = load i32*, i32** %9, align 8
  %22 = icmp eq i32* %21, null
  br i1 %22, label %25, label %23

; <label>:23:                                     ; preds = %3
  %24 = bitcast i32* %21 to i8*
  call void @_ZdaPv(i8* %24) #6
  br label %25

; <label>:25:                                     ; preds = %23, %3
  ret i32 0
}

; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1

; Function Attrs: nobuiltin
declare noalias i8* @_Znam(i64) #2

declare i32 @printf(i8*, ...) #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(i8*) #4

attributes #0 = { noinline norecurse optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { argmemonly nounwind }
attributes #2 = { nobuiltin "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #3 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nobuiltin nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { builtin }
attributes #6 = { builtin nounwind }

!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{!"clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)"}



Если откомментарить STL-шные шаблоны то ассемблерный output опухает в 30 раз. И смотреть его становится очень тяжело.

Пока никак не комментирую его содержимое. Просто смотрю.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969991
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, godbolt-ом не пользуешься?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969992
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. А надо?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969993
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, возможно
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969994
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну мячик на твоей стороне сейчас. Давай публикой еще больше дизассемблеров. Поищем там типизацию.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39970015
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
mayton, godbolt-ом не пользуешься?
Кому нужно это тупое г..но, которое не только не в курсе настроек оптимизации, но даже не понимает соглашения вызова? Разве, что чисто-теоретикам...

Все нормальные, пользующие ГНУС программисты для таких целей применяют параметр компилятора "-S" или используют соответствующий режим отладчика.
...
Рейтинг: 0 / 0
25 сообщений из 158, страница 6 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / указатель на массив. что это такое ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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