获取指向数组第一个元素的指针地址并将所有元素复制到新缓冲区

get address of pointer to first element of array and copy all elements to new buffer

我正在执行以下操作:

假设我有一个数组:

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));        
}

我想在我自己的内部缓冲区 pmyBuffer 中获取 Array ow 的值 调试后我看到 pmyBuffer 包含一个指针数组!? 不确定我做错了什么?我是 C 中指针的新手,如果有人能提供帮助,我将不胜感激。

谢谢!

问题中您提供的代码没有意义。如果你想

get address of pointer to first element of array and copy all elements to new buffer

那你就可以写

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;
}