Как я знаю, когда указатель передается в функцию, он становится просто копией реального указателя. Теперь я хочу, чтобы реальный указатель был изменен без необходимости возвращать указатель из функции. Например:
int *ptr;
void allocateMemory(int *pointer)
{
pointer = malloc(sizeof(int));
}
allocateMemory(ptr);
Еще одна вещь, а именно, как я могу выделить память для 2 или более размерных массивов? Не по индексу, а по арифметике указателей. Это:
int array[2][3];
array[2][1] = 10;
так же, как:
int **array;
*(*(array+2)+1) = 10
Кроме того, почему я должен передавать в памяти адрес указателя на функцию, а не сам указатель. Например:
int * a;
почему бы и нет:
allocateMemory(*a)
но
allocateMemory(a)
Я знаю, что всегда должен это делать, но я действительно не понимаю, почему. Пожалуйста, объясните мне.
Последнее, в указателе вот так:
int *a;
Является ли адрес памяти, содержащий фактическое значение, или адрес памяти указателя? Я всегда думаю, что это адрес памяти фактического значения, на которое он указывает, но я не уверен в этом. Кстати, при печати такой указатель выглядит так:
printf("Is this address of integer it is pointing to?%p\n",a);
printf("Is this address of the pointer itself?%p\n",&a);