【C语言进阶】指针的进阶【上篇】

本文深入探讨C语言的指针进阶知识,包括字符指针、指针数组和数组指针的概念及使用。通过实例解析数组传参和指针传参的区别,助你理解指针在C语言中的重要应用。
摘要由CSDN通过智能技术生成

  💘作者:你我皆为凡人

 💘博客主页:你我皆为凡人的博客

 💘名言警句:时间不会为任何人停留,而事物与人,无时不刻也在变化着。每一个人,也都在不停向前!

 💘觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!

 💘系列作品:

 💘

 💘C语言编程刷题篇

 💘经典题型系列

文章目录

 

目录

文章目录

前言

💫字符指针

💫指针数组

💫数组指针

💘 数组指针的定义

💘 &数组名VS数组名

💘 数组指针的使用

💫数组传参和指针传参

💘 一维数组传参

💘 二维数组传参

💘 一级指针传参

💘 二级指针传参

💞习题练习入口


前言

本文讲解了指针的进阶中的字符指针,数组指针,指针数组,数组传参和指针传参等一系列的知识,图文并茂,让你可以看懂并且理解


提示:以下是本篇文章正文内容,下面案例可供参考

💫字符指针

我们在之前的学习过程中已经了解到了初阶指针的一些知识,知道了指针的概念:

1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。
2. 指针的大小是固定的4/8个字节(32位平台/64位平台)。
3. 指针是有类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。
4. 指针的运算。
接下来我们继续探讨指针的高级主题
在指针的类型中我们知道有一种指针类型为字符指针char*
如下:
int main()
{
	char ch = 'w';
	char* pc = &ch;
	*pc = 'b';
	printf("%c\n", ch);
	return 0;
}

 像上面这种是把一个字符放入到指针中,大家还见过另外一种

如下:

下面是把abcdef这个字符串的首元素a的地址赋值到了p中,而不是整个字符串都给了p,而首元素地址打印,就顺便把后面一串都打印出来了

int main()
{
	char* p = "abcdef";
	//把字符串首元素a的地址地址赋值到p中
	printf("%s\n", p);
	return 0;
}

 接下来让大家看一道面试题来解解乏,顺便理解理解上面所讲:

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");
	if (arr1 == arr2)
		printf("arr1 == arr2\n");
	else
		printf("arr1 != arr2\n");
	return 0;
}

 

 为什么会是这样的结果呢?

p1与p2都是字符指针,而且const修饰无法改变指针,而“abcdef”是常量字符串,把首元素地址a给了p1与p2,既然是常量字符串,无法修改,只能读,在内存中存放多份好像没什么用,所以就有一块儿空间,而p1与p2指向的其实是相同的空间,所以打印相等

arr1是一个数组,而初始化会开辟一块儿空间,arr2也是一个数组,初始化开辟领一块儿空间,所以arr1与arr2并不相等

💫指针数组

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

int main()
{
	int arr[10]; //整型数组,存放整形的
	char arr1[10];//字符数组,存放字符的
	int* arr2[10];//整形指针数组,存放整形指针的
	char*
  • 83
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 134
    评论
评论 134
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值