Увеличивающийся массив указателей - PullRequest
0 голосов
/ 02 июля 2019

Я пытался увеличить массив указателей и назначить их адресами массива, но я не могу понять это.

Введите:

void * myParam(unsigned int *argv[]){

    for(unsigned int i = 0; i < 5; i++){
        printf("Block[%d] = Pointer Address %x\n", i, *(argv + i));
    }

    return *argv;
}



int main(){

    unsigned int arr[5] = {1,2,3,4,5};
    unsigned int *ptr;
    ptr = arr;
    ptr = myParam(&ptr);

}

Выход:

Block[0] = Pointer Address ea6d6b60

Block[1] = Pointer Address 1

Block[2] = Pointer Address 3

Block[3] = Pointer Address 5

Block[4] = Pointer Address f6770089

1 Ответ

1 голос
/ 02 июля 2019

У вас нет массива указателей.У вас есть указатель на один указатель (= массив из одного указателя).Подписка, что argv с чем-либо, кроме 0 (или 1, если вы не разыменовываете это), не определена.После того, как вы разыменовали его один раз, вы можете добавить от 0 до 4 (и, возможно, разыменовать их для получения значений массива (от 1 до 5)).

#include <stdio.h>
void * myParam(unsigned int *argv[]){

    for(unsigned int i = 0; i < 5; i++){
        printf("Block[%u] = Pointer Address %p, value=%u\n", i, (void*)(*argv + i), 
                                                                (*argv)[i]);
    }

    return *argv;
}

int main(){

    unsigned int arr[5] = {1,2,3,4,5};
    unsigned int *ptr;
    ptr = arr;
    ptr = myParam(&ptr);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...