c语言指针问题小结

最近使用指针的时候遇到了一些问题,在这里做一个简单的总结,加深下对指针的认识。数组和指针大部分情况下可以互换使用,但是有些时候却是必须得区别对待,否则一不小心就会出错。

比如下面四个test例子,test1是对的,test2是错的,指针指向一个地址的情况,因为GetUartData()返回一个指针地址,而数组初始化定义的时候,是已经明确指向了一个内存地址的,所以无法将一个新的指针地址赋给一个数组,只能是让另一个指针指向该地址。

char data[10];
char *GetUartData(void)
{
    return data;
}
void test1(void)
{
    char *p= NULL;  
    *p = GetUartData();
}
void test2(void)
{
    char *p= NULL; 
    char temp[10];  
    temp = GetUartData();
}

另一个是给指针赋值的问题,如下面的test例子,test3是错的,test4是对的,当定义一个指针时,首先得赋予它为一个空指针,如果需要给指针赋值,必须先初始化指针,让它指向一个特定的内存地址后,才可以给它赋值。

char data[10];
char *GetUartData(void)
{
    return data;
}
void test3(void)
{
    char *p= NULL;  
    memcpy(p,data,10);
}
void test4(void)
{
    char *p= NULL; 
    char temp[10]; 
    p = temp;
    memcpy(p,data,10);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值