C语言---指针进阶

1.字符指针

复制代码
int main()
{
	char str1[] = "hello world";
	char str2[] = "hello world";
	const char* str3 = "hello world.";
	const char* str4 = "hello world.";
	if (str3 == str4)
	{
		//常量字符串在内存里面是无法修改的,所以没必要存
		//2分,因为都无法改变
		printf("same\n");
	}
	else
	{
		printf("not same\n");
	}
	return 0;
}

(1)这里面的str3和str4就是字符指针,简而言之,字符指针就是存放字符的指针;

(2)字符指针变量指向的是首个字符的地址;

(3)上面的程序打印的结果就是same,因为加上const之后就是常量字符串,无法进行修改,所

以在内存里面不用存2份,因为反正也无法改变,所以他们的地址是相同的;

(4)str1和str2地址是不相同的,因为str1和str2是两个不同的数组,内存里面会分别给2个数组开

辟空间,所以他们的地址是一定不相同的;

2.指针数组

(1)这个先定义了3个数组,分别是arr1\[\],arr2\[\],arr3\[\],

(2)整形数组就是全是整数的数组,字符数组就是全是字符的数组,指针数组毫无疑问就是存放指针的数组,arr4就是一个指针数组,里面放着定义的三个数组的地址;

(3)这个是使用指针数组模拟实现二维数组,通过arr4i找到对应的数组的地址,

arr4ij就是找到数组里面对应的元素的地址;如下图所示

3.数组指针

int (*p) arr4就是数组指针;

(1)数组名是数组首个元素的地址,但是有2个例外

------->一个是&(数组名),这里的数组名是整个数组,求的是这个数组的地址;

-------->另外一个是sizeof(数组名),这里的数组名是整个数组,求的是数组的大小,单位字节;

(2)通过一个例子带你走进数组指针

arr+1就是跳过一个元素,所以相差4C-48=4个字节;

&arr+1就是跳过一个数组,所以相差95C-948=20个字节;

虽然数组的地址和首个元素的地址指向的位置一样,但是他们的类型不一样;

我们引入数组指针就是为了存放数组的地址,数组指针是这样表示的;

4.数组指针的使用

(1)二维数组的传参实际上传递的是地址

复制代码
void Print(int(*p)[5], int r, int c)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			printf("%d ", *(*(p + i) + j));
		}
		printf("\n");
	}
}
int main()
{
	int arr[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };
	Print(arr, 3, 5);
	return 0;
}

我们可以把一个二维数组理解成为3个一维数组组合而成的,第⼀⾏的⼀维数组的类型就是 int 5 ,所以第⼀⾏的地址的类 型就是数组指针类型 int(*)5

传参传递的是一维数组的地址;

由此可见:⼆维数组传参,形参的部分可以写成数组,也可以写成指针形式。

相关推荐
命运之光12 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
命运之光12 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
沫璃染墨14 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
qq_4480111616 小时前
C语言中的野指针和空指针
c语言·开发语言·单片机
en.en..18 小时前
C 语言嵌入式事件驱动状态机完整教程(枚举配套)
c语言·开发语言
Yyyyyy~18 小时前
[C语言]break和continue作业
c语言·开发语言
NoteStream19 小时前
【C语言基础】分支和循环(上)
c语言·开发语言·c++·经验分享·笔记·算法·c#
十月的皮皮1 天前
STM32从零到量产开发:四路继电器工业控制模块开发 -上位机 Program.cs 应用程序入口设计说明
c语言·stm32·单片机·stm32cubemx·hal库
坚持编程的菜鸟1 天前
模拟实现memcpy
c语言·算法·模拟实现my_memcpy
小小龙学IT1 天前
Day 28 项目调试与优化 —— 给聊天室做一次“全面体检“
c语言·开发语言