2021-03-12 C语言指针学习

带指针返回的字符串函数

char *strlong(char *str1, char *str2)
{
    if(strlen(str1) >= strlen(str2))
    {
        return str1;
    }
    else
    {
        return str2;
    }
}

函数

char *sp=NULL;
char str1[30], str2[30];
gets(str1);
gets(str2);
sp=strlong(str1,str2);
printf("%s\r\n",sp);

调用该函数则功能为输入两行字符串,比较其长度,返回较长字符串的指针。并显示输出。

注意,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针请尽量不要指向这些数据。

int *func(){
    int n = 100;
    return &n;
}

*如此定义函数是 n 是 func() 内部的局部变量,func() 返回了指向 n 的指针,func() 运行结束后 n 将被销毁,使用 *p 应该获取不到 n 的值。*前面我们说函数运行结束后会销毁所有的局部数据,这个观点正确。但是,这里所谓的销毁并不是将局部数据所占用的内存全部抹掉,而是程序放弃对它的使用权限,弃之不理,后面的代码可以随意使用这块内存。对于上面的两个例子,func() 运行结束后 n 的内存依然保持原样,值还是 100,如果使用及时也能够得到正确的数据,如果有其它函数被调用就会覆盖这块内存,得到的数据就失去了意义。

int *func(int *y1,int ch1)
{
    y1=&ch1;
    return y1;
}
int *y11=NULL;
int *gg=func(y11,888);

int a=100;
int *b=&a;
int *c=b;
则a b c 都为100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值