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; */ }