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

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

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

相关推荐
superman超哥18 分钟前
仓颉内存管理深度探索:引用计数的实现原理与实战
c语言·开发语言·c++·python·仓颉
黎雁·泠崖40 分钟前
C 语言结构体全解析:声明 + 内存对齐 + 位段 + 传参优化
c语言·开发语言
Once_day1 小时前
CC++八股文之基础语法(2)
c语言·c++
dawnButterfly1 小时前
C 语言标准、编译器与操作系统的关系
c语言·开发语言·c++
superman超哥2 小时前
仓颉语言智能指针深度实战:突破 GC 与所有权的边界
c语言·开发语言·c++·python·仓颉
AuroraWanderll2 小时前
类和对象(四):默认成员函数详解与运算符重载(下)
c语言·数据结构·c++·算法·stl
HUST3 小时前
C 语言 第九讲:函数递归
c语言·开发语言·数据结构·算法·c#
郝亚军3 小时前
顺序栈C语言版本
c语言·开发语言·算法
Henry Zhu1234 小时前
VPP中DHCP插件源码深度解析第二篇:DHCPv4客户端实现详解(下)
服务器·c语言·网络·计算机网络·云原生
唐·柯里昂7984 小时前
[rk3566AI模型部署]泰山派buildroot部署yolov5 使用rknn_model_zoo
c语言·c++·笔记·yolo·rk3566·瑞芯微·泰山派