Я хочу назначить адрес массива указателей указателю на массив указателей. Вот что я сделал ниже для аргумента функции. Это не функционировало правильно, это было разыменование к неправильным значениям. Я сузил проблему до кода ниже. Но я не понимаю проблемы.
#include <stdio.h>
void test( char * arg[]){
char * local[] = {"break", "the", "silence", NULL};
char * (*argptr)[];
char * (*localptr)[];
argptr = &arg;
localptr = &local;
printf("address of arg %p\n", &arg);
printf("address argptr is pointing to %p\n", argptr);
printf("address of local %p\n", &local);
printf("address localptr is pointing to %p\n", localptr);
printf("arg %p\n", arg);
printf("argptr is pointing to %p\n", *argptr);
printf("local %p\n", local);
printf("localptr is pointing to %p\n", *localptr);
}
int main()
{
char * somecmd[] = {"words", "like", "violence", NULL};
test(somecmd);
return 0;
}
Выход для вышеуказанного кода:
address of arg 0x7ffd0ab3c418
address argptr is pointing to 0x7ffd0ab3c418
address of local 0x7ffd0ab3c420
address localptr is pointing to 0x7ffd0ab3c420
arg 0x7ffd0ab3c450
argptr is pointing to 0x7ffd0ab3c418
local 0x7ffd0ab3c420
localptr is pointing to 0x7ffd0ab3c420
Адрес arg и значение argptr совпадают. Это также верно для адреса local и значения localptr. Однако значение arg и значение argptr разыменовываются. Это то, чего я ожидал. Я ожидал что-то более похожее на значение local и значение localptr, разыменованное, они одинаковые.
Почему у разыменованных arg и argptr разные значения?