Chapter5.h
#ifndef __CHAPTER_5_
#define __CHAPTER_5_
/*《深入理解C指针》学习笔记 -- 第五章*/
/*不应该修改的字符串就应该用 const char* 去修饰*/
size_t __strlen_test(const char*);
/*返回字符串的几种方法*/
char* __return_str__test();
#endif
Chapter5.cpp
#include "Chapter5.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
size_t __strlen_test(const char* pstr)
{
size_t length = 0;
/*
由于参数用const去修饰,所以,在函数中,我们不能去改变指针指向的字符串,
否则,会产生编译错误
*/
// *pstr = 'a'; 这里编译错误
while (*pstr++)
++length;
return length;
}
/*返回字符串的几种方法*/
char* __return_str__test()
{
/*
第一种方法
返回一个字面值常量,因为这是一个字面值常量,它存储在常量存储区中,
当程序终止时,才会消失,所以,返回它的地址不会出现问题
*/
/*
srand(time(NULL));
int num = rand() % 2;
if (num % 2 == 0)
return "even number";
else
return "odd number";
*/
/*
第二种方法
返回一个动态内存指向的地址,因为这个地址是在堆中分配的,所以,只有
当程序员自己释放这块内存时,它才会消失,所以,返回它的地址不会出现问题
*/
/*
char* p_str = (char*)malloc(sizeof(char) * 16);
strcpy(p_str, "DLUTBruceZhang");
return p_str;
*/
/*
第三种方法
返回一个静态字符串,这个字符串存储在静态存储区,即全局变量存储的地方,只有当
程序结束时,这块内存才会消失,所以,返回它的地址不会出现问题
*/
/*
static char str[] = "DLUTBruceZhang";
return str;
*/
/*
第四种方法
首先,这是一个错误的方法
它返回的是一个局部变量的地址,这块内存存储在栈中,当函数返回后,这块内存就会被
别的值覆盖,即指向的地址存储的不是想要的值,我们在程序中是需要避免的
*/
/*
char __str[] = "DLUTBruceZhang";
return __str;
*/
}