C语言初阶————指针1

发布于:2025-08-28 ⋅ 阅读:(17) ⋅ 点赞:(0)

8月24日学习总结:

        开启新篇章——指针,指针对于初学者来说是比较难懂的一章了,好在本次学习内容只是简单的结束一下初阶指针,慢慢地从简到难一步步去了解去剖析指针,本次学习分为两个部分:

(一)什么是指针?

在学习什么是指针之前先了解内存空间如何管理(什么是地址)?
将内存空间切割成内存单元(1单元1byte),将内存单元进行编号,其编号称为地址。
①指针就是内存单元的编号,也就是地址,口语中所说的指针通常是指指针变量,用来存放地址的变量。
②指针的大小:在32位平台(x86)是4个字节,在64位平台(x64)是8个字节。

补充知识点:sizeof操作符的返回值为无符号整形(unsigned int),打印时用%zu(%u)

int main()
{
	int* pa = NULL;
	char* pr = NULL;
	short* pt = NULL;
	double* pe = NULL;
	long* pg = NULL;

	printf("%zu\n", sizeof(pa)); 
	printf("%zu\n", sizeof(pr));
	printf("%zu\n", sizeof(pt));
	printf("%zu\n", sizeof(pe));
	printf("%zu\n", sizeof(pg));

	return 0;
}

(二)指针和指针类型

既然不同类型的指针变量的大小相同,是否可以将一个类型直接代替其他类型的指针变量吗?
答案当然是不能,那指针变量的类型有什么作用呢?

int main()
{
	int a = 0x11223344; //不同的进制的区别就是用不同的数码表示同一个数
	//十进制 100
	//十六进制 64
	//二进制 0110 0100
	//八进制 144
	int* pt = &a;
	char* pr = ( char* ) & a;
	//将指针类型进行转换可能会报错,所以一般需要加上强制类型转换操作符
	*pt = 0;
	//*pr = 0;

	return 0;
}

当给pr赋值0时:

当给pt赋值0时:

①指针类型决定了指针的被解析引用的时候访问几个字节

char类型占一个字节,int类型占四个字节。将int类型的指针变量改变改变4个字节,而char类型的指针变量改变只会改变一个字节。由此可以得出:指针类型决定了指针的被解析引用的时候访问几个字节。

②指针的类型决定了指针+-1操作的时候跳过几个字节,也就是步长的大小

当char*类型+1时跳过一个字节,而int*类型+1时跳过4个字节。所以指针的类型决定了指针+-1操作的时候跳过几个字节,也就是步长的大小。

注意:那么相同字节大小的类型就完全相同吗?答案当然不是
例如int*类型和float*类型

int main()
{
	int a = 0;
	int b = 0;
	int* pr = &a;
	float* pt = &b;
	a = 100;
	b = 100.0f;
	return 0;

}

由此可以得出:虽然保存的内容相同,但是保存的方式不同。