(C语言)指针的进阶

1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。

2.指针的大小是固定的4/8个字节(32位平台/64位平台)。

3.指针是有类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。

4.指针的运算。

一、关于两个数组和指针是否相等的问题;

cs 复制代码
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>

int main()
{
	//初始化变量值;
	//初始化指针;
	const char* p1 = "abcdef";
	const char* p2 = "abcdef";

	//初始化数组;
	char arr1[] = "abcdef";
	char arr2[] = "abcdef";

	//判断比较指针是否相等结果结果;
	if (p1 == p2)
	{
		//打印结果;
		printf("p1 == p2\n");
	}
	else
	{
		//打印结果;
		printf("p1 != p2\n");
	}
	//结果为:p1 == p2;
	//原因:因为*p1和*p2在存储时存储的是字符串首字母的地址,p1和p2的首字母都是a,a的地址是一样的;
	//所以说p1 == p2;

	//判断数组是否相等结果;
	if (arr1 == arr2)
	{
		//打印结果;
		printf("arr1 == arr2\n");
	}
	else
	{
		//打印结果;
		printf("arr1 != arr2\n");
	}
	//结果为: arr1 != arr2;
	//原因:因为arr1和arr2属于两个不同的数组,会在内存中开辟不同的空间;
	//所以这两个字符串数组即使内容一样,但是也不会相等;

	return 0;
}

二、指针数组;

指针数组是数组,是用来存放指针的数组;

int arr10 //整型数组;

char arr5 //字符数组;

int* arr10 //存放整型指针的数组;

char* arr5 //存放字符指针的数组;

三、用一维数组实现二维数组;

cs 复制代码
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>

int main()
{
	//初始化变量值;
	int arr1[] = { 1, 2, 3, 4, 5 };
	int arr2[] = { 2, 3, 4, 5, 6 };
	int arr3[] = { 3, 4, 5, 6, 7 };

	//初始化指针变量值;
	int* parr[] = { arr1, arr2, arr3 };

	//打印数组;
	int i = 0;
	int j = 0;
	//循环打印;
	for (i = 0; i < 3; i++)
	{
		//内层循环;
		for (j = 0; j < 5; j++)
		{
			//打印结果;
			// printf("%d", *(parr[i] + j));
			//*(p + i) ---> p[i]
			printf("%d", parr[i][j]);
		}
		//每个数组循环完成后换行;
		printf("\n");
	}

	return 0;
}

四、数组指针;

数组名通常表示的都是数组首元素的地址

但是有2个例外:

1.s1zeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小单位是字节

2.&数组名,这里的数组名表示的依然是整个数组,所以&数组名取出的是整个数组的地址

相关推荐
大鱼>5 分钟前
DSPy:LLM程序自动编译与提示词优化
开发语言·人工智能·python·深度学习
撩妹帝九歌13 分钟前
Java文件写入与编码、字节数组、字符集、字符编解码 一文打通!
java·开发语言
星核0penstarry21 分钟前
Solon AI v4.0.4 技术分析:Java Agent 框架的兼容性突破与选型考量 基于 OSCHINA 2026-07-30 报道及公开技术资料整理
java·开发语言·人工智能
加油码27 分钟前
共享内存详解:原理、系统调用与高性能进程间通信
linux·c语言·c++
昨夜星河入梦来28 分钟前
postman接口测试报错503的解决方法
开发语言·postman
spider_xcxc1 小时前
Jenkins 遇见 Argo CD:构建可靠 GitOps 流水线的实战指南
java·开发语言·servlet
Lzh编程小栈1 小时前
【STM32底层精讲】RCC时钟系统超全详解(时钟树+源码+避坑指南)
c语言·stm32·单片机·嵌入式硬件·面试
IT小盘1 小时前
16-Prompt版本管理-从手工修改到可追踪配置系统
开发语言·人工智能·python·prompt
Cx330❀1 小时前
【Linux网络】深入 HTTP 协议(五):从 Cookie/Session 原理到 C++ 源码实战
linux·运维·服务器·开发语言·网络·c++·http
keyipatience2 小时前
Socket编程3个版本
linux·运维·服务器·开发语言·网络·ubuntu