LINUX.ORG.RU

никак. передай const указатель.

x0r ★★★★★
()
int function (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8);

Рекомендации лучших китайских собаководов.

anonymous
()

Вброс

Если взять немного другой язык…

package main

import "fmt"

func bieber(a [3]int) {
	a[1] = 100
	fmt.Println(a)
}

func main() {
	x := [3]int{1, 2, 3}
	fmt.Println(x)
	bieber(x)
	fmt.Println(x)
}
[1 2 3]
[1 100 3]
[1 2 3]
PolarFox ★★★★★
()

Как вариант - libFFI. Но вообще - не надо этого хотеть.

runtime ★★★★
()

нужно завернуть его в структуру и передавать по значению структуру. Но так делать вообще не нужно.

mashina ★★★★★
()

Стреляй_в_голову_убивай_мозг_коллег.c

Solace ★★
()
Ответ на: Вброс от PolarFox

Если взять немного другой язык…

Ага

#include <cstdio>
#include <array>

void wut(std::array<int, 3> a) {
    a[1] = 100;
    for (auto e : a) printf("%d\n", e);
}

int main() {
    std::array<int, 3> x = {{1, 2, 3}};
    for (auto e : x) printf("%d\n", e);
    wut(x);
    for (auto e : x) printf("%d\n", e);
}
quasimoto ★★★★
()

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

anonymous
()
Ответ на: комментарий от quasimoto

А то я ж один в один писал.

а, я не заметил, звиняй

Stil ★★★★★
()

выделить память, скопировать исходный массив, передать указатель на копию в функцию, после функции освободить память

sdio ★★★★★
()

заверни его в структуру в плюсатом с шаблонами это еще проще

m4
()
Ответ на: Вброс от PolarFox

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

anonymous
()
Ответ на: комментарий от anonymous

что сложно представить ситуацию в которой копирование на стек при вызове экономичней чем каждократное разыминование?

qulinxao ★★☆
() автор топика
Ответ на: комментарий от qulinxao

что сложно представить ситуацию в которой копирование на стек при вызове экономичней чем каждократное разыминование?

Сложно. Потому что в машкоде у тебя всё-равно будет «каждократное разыминование».

Или ты думаешь, что mov eax, [esp + offset] чем-то принципиально отличается от mov eax, [edx + offset]?

А если тебе надо по массиву бегать итератором, то в обоих случаях в теле цикла у тебя будет что-то типа типа mov eax, [edx]; lea edx, [edx + 4], абсолютно пофиг, где массив лежит.

anonymous
()
Ответ на: комментарий от qulinxao

не факт что железка x86

А какая разница? Все используемые архитектуры имеют эквивалентную архитектуру: мало дешевых (по времени доступа) регистров и много дорогой памяти.

И вся работа с твоим массивом упрётся в выполнению операций «загрузить слово в регистр» и «сохрнить слово из регистра» - абсолютно пофиг, какой кусок памяти ты будешь читать/писать - в локальном фрейме стека или нет.

anonymous
()

Фактически то, что ты хочешь сделать, реализуется так: в функцию передастся ссылка на массив, в начале функции будет выделена память и массив туда будет скопирован.

Ну и сделай это явно, коли хочешь. В чем проблема-то?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

видимо да, благодарю. понадобилось.

qulinxao ★★☆
() автор топика
Ответ на: комментарий от qulinxao

что сложно представить ситуацию в которой копирование на стек при вызове экономичней чем каждократное разыминование?

Обращение к стеку тоже идёт через указатель. И тоже с арифметикой.

ziemin ★★
()
Ответ на: комментарий от Deleted

обьект равный но не идентичный исходному и ещё несколько частностей не важных в данном разговоре.

qulinxao ★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.