帮我看一个程序,谢谢。
代码如下:
#include "stdio.h "
#include "stdlib.h "
void populate(unsigned char ** ptr);
int main()
{
unsigned char p1[10];
printf( "The array base address is 0x%x.\n ", p1);
populate(&p1);
printf( "The second is %c\n ", p1[1]);
return 0;
}
void populate(unsigned char ** ptr)
{
unsigned char p2[10] = "012345678 ";
if(*ptr != NULL)
{
memcpy(*ptr, p2, 10);
}
}
在此程序中我感觉p1的使用是有问题的,但同事说没事,我试了一下,不太好用,能否给我解释一下,谢谢。
[解决办法]
本来直接传指针就可以解决的问题,为什么想着传指针的地址呢,实际上还是传数组地址才好用吧
有多此一举的嫌疑。
我这里是这样也能得到你想要的结果。
#include "stdio.h "
#include "stdlib.h "
#include <memory.h>
void populate(unsigned char *****ptr);
int main()
{
unsigned char p1[10];
printf( "The array base address is 0x%x.\n ", p1);
populate((unsigned char*****)&p1);
printf( "The second is %c\n ", p1[1]);
return 0;
}
void populate(unsigned char *****ptr)
{
unsigned char p2[10] = "012345678 ";
if(ptr != NULL)
{
memcpy(ptr, p2, 10);
}
}
有意思吗?
[解决办法]
同上~~~
传指针地址有时候有需要~
用在这里便多此一举~
[解决办法]
多此一举
[解决办法]
void populate(unsigned char ** ptr);
populate(&p1);
传入的实参与形参类型不一致吧。
[解决办法]
memcpy(ptr,p2,10);
[解决办法]
数组名本身就代表一个地址
unsigned char p1[10];
unsigned char *p=p1;
这是完全正确的
但数组名特殊的地方是它还有类型信息,对一个数组名取地址得到的指针指向与数组名一致,但类型不同.
populate(&p1);//这个在概念上是不严格的
cannot convert parameter 1 from 'unsigned char (*)[10] ' to 'unsigned char ** '
比较清楚的做法是这样:
int main()
{
unsigned char p[10];
unsigned char *p1=p;//////////////
printf( "The array base address is 0x%x.\n ", p1);
populate(&p1);
printf( "The second is %c\n ", p1[1]);
return 0;
}