首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮小弟我看一个程序,多谢

2012-02-12 
帮我看一个程序,谢谢。代码如下:#includestdio.h #includestdlib.h voidpopulate(unsignedchar**ptr)i

帮我看一个程序,谢谢。
代码如下:
#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;
}

热点排行