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

      上周末,我在图书馆看到了这本很薄的书 -- 《深入理解 C 指针


      这本书中写的内容,个人感觉适合一个初学者,内容不是很难。我也读了下,对每一章都做了笔记,笔记都是用代码的形式贴出来。

Chapter1.h

#ifndef		__CHAPTER_1_
#define		__CHAPTER_1_

/*《深入理解C指针》学习笔记 -- 第一章*/

/*一个数如果是无符号的,那么尽量去选用 size_t 类型*/
/*使用 size_t 类型的时候一定要用对了输出格式*/
void __size_t_test();

//对指针进行加的操作就是指针原来指向的地址加上数据类型的大小乘以加的那个数
//对指针进行减的操作就是指针原来指向的地址减去数据类型的大小乘以减的那个数
void __pointer_add_sub_test();

/*指针用 const 修饰的各种表现*/
void __const_to_pointer();

#endif

Chapter1.cpp

#include "Chapter1.h"
#include <stdio.h>

/*一个数如果是无符号的,那么尽量去选用 size_t 类型*/
/*使用 size_t 类型的时候一定要用对了输出格式*/
void __size_t_test()
{
	size_t test1 = -1;

	printf("test1 : %d\n", test1);
	printf("test1 : %u\n", test1);

	size_t test2 = 1;

	printf("test2 : %d\n", test2);
	printf("test2 : %u\n", test2);

	/*
		输出结果如下:
		test1 : -1
		test1 : 4294967295
		test2 : 1
		test2 : 1
	*/
}

//对指针进行加的操作就是指针原来指向的地址加上数据类型的大小乘以加的那个数
//对指针进行减的操作就是指针原来指向的地址减去数据类型的大小乘以减的那个数
void __pointer_add_sub_test()
{
	int test1 = 1;
	int* p_test1 = &test1;

	char test2 = 'a';
	char* p_test2 = &test2;

	printf("p_test1 - 1 address is : %x\n", p_test1 - 1);
	printf("p_test1 address is : %x\n", p_test1);
	printf("p_test1 + 1 address is : %x\n", p_test1 + 1);

	printf("\n");

	printf("p_test2 - 1 address is : %x\n", p_test2 - 1);
	printf("p_test2 address is : %x\n", p_test2);
	printf("p_test2 + 1 address is : %x\n", p_test2 + 1);

	/*
		输出结果如下:
		p_test1 - 1 address is : 2dfdb8
		p_test1 address is : 2dfdbc
		p_test1 + 1 address is : 2dfdc0

		p_test2 - 1 address is : 2dfda6
		p_test2 address is : 2dfda7
		p_test2 + 1 address is : 2dfda8
	*/
}

void __const_to_pointer()
{
	/*指向常量的指针*/
	/*这里的指向常量只是指针认为是指向常量的*/
	int test1 = 1;
	const int test2 = 2;

	/*这两个操作都是可以的,但是不能解引用而修改它*/
	const int* p_test1 = &test1;
	const int* p_test2 = &test2;

	test1 = 3;      /*这个是可以的*/
	//	*p_test1 = 3;		但是这个不行

	/*指向非常量的常量指针*/
	int test3 = 3;

	int* const p_test3 = &test3;	/*指针只能指向非常量,因为可以用解引用修改变量的值*/
	//	p_test3 = &test1;			同时,指针的值不能被修改
	//	int* const p_test4 = &test2;	指针只能指向一个非常量,因为可以被修改

	/*指向常量的常量指针*/
	const int* const p_test4 = &test2;		/*代表指针的指向和指针指向的值都不能被修改*/
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值