Двумерный массив не распадается на указатель на указатель на int. Он распадается на указатель на массивы ints - то есть только первое измерение распадается на указатель. Указатель не указывает на int указатели, которые при инкрементах увеличиваются на размер указателя, но на массивы из 5 целых чисел.
class Myclass {
private:
int myarray[5][5];
public:
typedef int (*pointer_to_arrays)[5]; //typedefs can make things more readable with such awkward types
pointer_to_arrays get_array() {return myarray;}
};
int main()
{
Myclass o;
int (*a)[5] = o.get_array();
//or
Myclass::pointer_to_arrays b = o.get_array();
}
Указатель на указатель (int**
) используется, когда каждый subarray выделяется отдельно (т. е. изначально у вас есть массив указателей)
int* p[5];
for (int i = 0; i != 5; ++i) {
p[i] = new int[5];
}
Здесь мы имеем массив из пяти указателей, каждый из которых указывает на первый элемент в отдельном блоке памяти, всего 6 различных блоков памяти.
В двумерном массиве вы получаете единый непрерывный блок памяти:
int arr[5][5]; //a single block of 5 * 5 * sizeof(int) bytes
Вы должны видеть, что расположение памяти этих вещей совершенно иное, и поэтому эти вещи не могут быть возвращены и переданы одинаково.
РЕДАКТИРОВАТЬ: Этот ответ касается только установки исполняемых скриптов в / usr / bin
. Я предполагаю, что у вас есть базовые знания о том, как работают файлы setup.py
.
Создайте свой сценарий и поместите его в свой проект следующим образом:
yourprojectdir/
setup.py
scripts/
myscript.sh
В вашем файле setup.py
сделайте это:
from setuptools import setup
# you may need setuptools instead of distutils
setup(
# basic stuff here
scripts = [
'scripts/myscript.sh'
]
)
Затем введите
python setup.py install
В основном это все. Есть шанс, что ваш скрипт попадет не совсем в / usr / bin
, а в какой-нибудь другой каталог. В этом случае введите
python setup.py install --help
и найдите - параметр install-scripts
и друзья.