c语言函数参数为指针的情况分析

函数参数为指针时的情况分析:

1)实参已经初始化

例如:

char ch[1024];
int* func(char *p)
{
    memcpy(p,"hello");
}

//函数调用:
func(ch);

分析:实参已经被初始化了,即:指针ch已经指向了内存空间。

2)实参未初始化或着值为NULL。

错误写法:

//错误写法
char *ch;
int* func(char *p)
{
    p = (char*)malloc(sizeof(char)*5);
    p[0]='h';
    
}

//函数调用:
func(ch);

//此时因为ch没有初始化,所以函数传递属于值传递,这样并不能给实参初始化。

改正方法一:采用传引用的方式,而不是值传递的方式
 

char *ch;
int* func(char* &p)
{
    p = (char*)malloc(sizeof(char)*5);
    p[0]='h';
    
}

//函数调用:
func(ch);

 改正方法二:采用指针传递,而不是值传递,因为实参本身是指针,所以函数参数可以为二重指针

char *ch;
int* func(char** p)
{
    *p = (char*)malloc(sizeof(char)*5);
    (*p)[0]='h';
    
}

//函数调用:
func(&ch);

 实参为NULL的情况

//实参虽然出事话为NULL了,仍然不能直接使用//因为指针仍然没有指向内存
char *ch=NULL;
int* func(char*p)
{
   if(!ch)
        printf("error");
    
}

//函数调用:
func(ch);

总结

如果函数形参要通过指针传递,且该指针没有初始化,则要么采用(二重)指针的形式,要么采用引用的形式进行参数初始化;

如果实参指针已经初始化了,则可以直接通过值传递即可。

另,参考示例可以参看本文

猜你喜欢

转载自blog.csdn.net/modi000/article/details/113969352