获取指向数组第一个元素的指针地址并将所有元素复制到新缓冲区
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;
}
我正在执行以下操作:
假设我有一个数组:
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;
}