当前位置:网站首页>指针函数(基础)

指针函数(基础)

2022-07-05 04:16:00 曹乐乐爱学习

写一个指针类型的函数,返回一个指针,但是:

这个之前有解释过:

所以,在函数调用时候,返回值,是没有问题的;因为在函数中返回值的地址空间在被释放之前,值就已经赋值给了函数名,而返回地址时候,这块地址空间已经被释放了(个人理解,未必正确)。

要想返回地址没有问题:

1、设置全局变量——不建议

2、设置静态变量——视情况而定()

对比看一下:

 返回值:

返回地址(返回值是函数指针):

 局部变量,不能返回地址再取值:

要修改存储类型,使其在函数调用之后,内存不被释放:

 附:字符串连拷贝——将通同样的数据内容,从一个地址空间,拷贝到另一个地址空间

函数原型  char *strcpy(char *dest, const char *src);

函数指针练习:模仿strcat函数,实现自己的字符串连接

 

注意:自增运算符的优先级>取值优先级,所以*str++ ==> *(str++)

与 i++一样,只不过一个是变量i,一个是指针变量*p;其实都是先用,再加:

i++ 是先用i的值,再将i的值++

*p++ 是先用*p的值,再将p的地址++

拆开来写就是:

*str

str++

 

因此:*str1++ = *str2++; 其实就是 *(str1++) *(str2++);

要理清楚的 :*(str1++) *(str2++);可不是str2地址递增,str2地址递增,然后取str2递增后的值,赋值给str1地址递增后的位置。而是与 a++ = i++一样

先各自取值,再赋值,然后再地址递增:

*str1 =*str2;

str2++;

srt1++;

------------------------------------------------------------------------------------------------------------------

练习2:模仿字符串转整形函数:atoi。

写一个自己的整形转字符串:inttostr

 思路:

1、先用循环对整数取余,并移除掉最低位

2、字符’0‘与整数0,相差48,也就是’0‘

3、将筛选出来的每一位,存到数组里(这时候是反的,最低位跑到了最左边)

4、交换

(由于aa[i],在转换完成后,人为补了一个’\0‘,所以i--,走到最后一个字符aa[i],再找一个变量n从数组aa[0]开始交换,并往中间走。)

于是:

倒数第一个字符与第一个字符交换

倒数第二个字符与第二个字符交换

........随着i--;j++;若i=j,则数据为奇数个;若i<j,则说明数据为偶数个

如果是奇数个,i=j时候,最中间的字符不用动;偶数个时候,当i<j时候,最中间的两个数据已经被交换。

还有一个问题:上面代码中,函数中定义了一个静态数组,大小是固定的;那么,如果参数传递一个数组进来,是不是更好?

 

原网站

版权声明
本文为[曹乐乐爱学习]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_42212668/article/details/125580389