深入理解 C 指针阅读笔记 -- 第五章

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


原文地址:https://www.cnblogs.com/blfbuaa/p/6900877.html