[C指针]指针与字符串:传递字符串、返回字符串
2019-04-15 本文已影响0人
AkuRinbu
学习笔记
《深入理解C指针》
http://www.ituring.com.cn/book/1147
第5章 指针与字符串
三、传递字符串
1、传递简单字符串
传递简单字符串形参是
char * str
或者char str[ ]
- 函数调用,使用指针,直接用指针名
- 函数调用,使用数组,有三种选择
2、传递常量字符的指针
形参是
const char* string
- 不允许通过指针修改常量
3、传递需要初始化的字符串
4、给应用程序传递参数
int main(int argc, char** argv) {}
int main(int argc, char* argv[]) {}
- 输出参数列表
for(int i=0; i<argc; i++) {
printf("argv[%d] %s\n",i,argv[i]);
}
- 操作系统将
argc
设为argv
数组的个数,即参数个数 ,第一个参数是程序名,即argv[0]
;https://www.jianshu.com/p/8773dc8df11c
四、返回字符串
- 函数返回字符串时,返回的是字符串的地址
1、返回字面量的地址
- 静态变量,就是永远只有一份
- 好处:可以避免在不同的地方存着多个值相同的“拷贝”
- 隐患:函数中声明了静态字符串的指针,并且需要返回这个静态字符串的指针,多次调用这个函数,可能会造成覆盖
(staticFormat
两次调用都使用同一个静态缓冲区,后一次调用会覆写前一次调用的结果。)
2、返回动态分配内存的地址
函数内动态分配图5-14:返回动态分配的字符串
- 函数内使用
malloc
动态分配内存,每次都返回不同的内存地址
- 函数内使用局部数组,返回局部数组地址,无法保证返回地址总是新的, 多次调用函数可能会造成覆盖