получить адрес указателя на первый элемент массива и скопировать все элементы в новый буфер - PullRequest
1 голос
/ 04 марта 2020

Я делаю следующее:

Допустим, у меня есть массив:

uint8 Array[100] = {25,33,48,20,.....}; 

Существует функция, которая выполняет следующее:

void getValues(uint8 **pvalues)
{
    *pvalues =&Array[0];        //Saves the address of first element of Array[]
}

позже в моем коде появилось следующее:

uint8 *pmyValues;
uint8 myBuffer[100];
uint8 i=0;

getValues(&pmyValues)

for (i;i<100;i++)
{
   (void)memcpy(&myBuffer[i], (uint8*)&pmyValues[i], sizeof(uint8));        
}

Я хочу получить значения из Array ow в моем собственном внутреннем буфере pmyBuffer. После отладки я вижу, что pmyBuffer содержит массив указателей !? Не уверен, что я делаю не так? Я новичок в указателях в C и был бы благодарен, если бы кто-нибудь смог помочь.

Спасибо!

1 Ответ

4 голосов
/ 04 марта 2020

Представленный вами код в вопросе не имеет смысла. Если вы хотите

получить адрес указателя на первый элемент массива и скопировать все элементы в новый буфер

, тогда вы можете просто написать

memcpy( myBuffer, Array, 100 * sizeof( *Array ) );

Вот демонстрационная программа

#include <stdio.h>
#include <string.h>
#include <stdint.h>

int main(void) 
{
    enum { N = 10 };
    uint8_t Array[N] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
    uint8_t myBuffer[N];

    memcpy( myBuffer, Array, N * sizeof( *Array ) );

    for ( size_t i = 0; i < N; i++ )
    {
        putchar( myBuffer[i] );
    }
    putchar( '\n' );

    return 0;
}

Вывод программы:

ABCDEFGHIJ

Если по какой-то причине вам нужно использовать промежуточный указатель, тогда код может выглядеть примерно так:

#include <stdio.h>
#include <string.h>
#include <stdint.h>

void getValues( uint8_t **pvalues, uint8_t Array[] )
{
    *pvalues = Array;
}

int main(void) 
{
    enum { N = 10 };
    uint8_t Array[N] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
    uint8_t myBuffer[N];

    uint8_t *pmyValues;

    getValues( &pmyValues, Array );

    memcpy( myBuffer, pmyValues, N * sizeof( *pmyValues ) );

    for ( size_t i = 0; i < N; i++ )
    {
        putchar( myBuffer[i] );
    }
    putchar( '\n' );

    return 0;
}
...