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)这个是使用指针数组模拟实现二维数组,通过arr4[i]找到对应的数组的地址,

arr4[i][j]就是找到数组里面对应的元素的地址;如下图所示

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];

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

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

相关推荐
第七序章37 分钟前
【C++】AVL树的平衡机制与实现详解(附思维导图)
c语言·c++·人工智能·机器学习
Emilia486.4 小时前
【Leetcode&nowcode&数据结构】单链表的应用(初阶)
c语言·数据结构·算法·leetcode
草莓工作室4 小时前
AT指令解析:TencentOS Tiny AT指令解析源码分析2-数据类型定义
c语言·at指令·tencentos tiny
骁的小小站4 小时前
Learn C the Hardway学习笔记和拓展知识(一)
c语言·开发语言·c++·经验分享·笔记·学习·bash
胖咕噜的稞达鸭6 小时前
C++中的父继子承(2)多继承菱形继承问题,多继承指针偏移,继承组合分析+高质量习题扫尾继承多态
c语言·开发语言·数据结构·c++·算法·链表·c#
时时三省6 小时前
【时时三省】(C语言基础)用格式化的方式读写文本文件
c语言
ll5776443327 小时前
从局部优化到全局赋能DevOps在云原生时代的核心价值演进与实践路径探析
c语言
Yurko137 小时前
【C语言】环境安装(图文)与介绍
c语言·开发语言·学习
仲星(._.)7 小时前
C语言:字符函数和字符串函数
c语言·开发语言
在繁华处8 小时前
C语言初步学习:数组的增删查改
c语言·数据结构·学习