【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?

这篇具有很好参考价值的文章主要介绍了【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针

🎬 鸽芷咕个人主页

 🔥 个人专栏:《C语言进阶篇》《C语言初阶篇》
⛺️生活的理想,就是为了理想的生活!

📋 前言

   🌈hello! 各位宝子们大家好啊,前面我们已经把指针大部分内容给学完了,今天就给大家带来数组指针or指针数组!
   ⛳️很多说这俩名字不是差不多嘛?那么肯定是一个意思,诶这里可不敢理解一样!数组指针or指针数组是有明显不一样的下面我们就来看看
   📚本期文章收录在《C语言初阶篇》,大家有兴趣可以看看呐
  ⛺️ 欢迎铁汁们 ✔️ 点赞 👍 收藏 ⭐留言 📝!

🔥 注:本篇文章需要用到前一章内容二级指针的概念需要的可以去看看呢。《指针详讲》

💬 指针数组

  ⛳️ 指针数组是指针还是数组?这是我们想问的问题!其实我们可以采用类比的方法进行比较,比如说 整形数组指针数组 俩个命名只有前面两个字不一样。

  • 整形数组 是用来存放整形的数组
  • 指针数组 自然是用来存放指针(地址)的数组
  • 这样比较起来是不是就能快速的理解指针数组的概念!

💭 指针数组的定义

数组我们已经知道整形数组,字符数组。那么指针数组该怎么定义呢?其实也非常简单。

  • 既然 字符数组 是这样定义的 char arr1[ 3 ]
  • 那么 指针数组 也是一样的 char* p[ 3 ] = {arr1,NULL,NULL};
  • 只需要把类型定义为我们想要存储的指针类型就好了

📚 代码演示:

#include <stdio.h>
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "hello world";
	char arr3[] = "cuihua";

	char* parr[] = { arr1, arr2, arr3 };
	return 0;
}

✅ 指针数组的使用

⛳️ 指针数组的使用和数组的使用一模一样,只需要循环遍历就行了

  • 而如何想访问字符数组的元素就需要和二级指针【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针
    📚 代码演示:
#include <stdio.h>
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "hello world";
	char arr3[] = "cuihua";

	//指针数组
	char* parr[] = { arr1, arr2, arr3 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		printf("%s\n", parr[i]);
	}
	return 0;
}

📑 代码结果:
【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针

🔰 如何访问存放在的指针数组里的数组元素

我们既然可以利用指针数组去打印存放在 指针数组里面的数组元素,那么肯定可以去访问数组里面的元素!

  • prr[ 0 ] 可以访问指针数组里面的第一个数组
  • 既然能找到第一个数组那继续按照数组遍历里面的内容就OK了
  • par[ 0 ][ 0 ] 这个意思是找到指针数组里面存放的第一个数组的第一个元素
  • 看一下图其实大家就懂了
    【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针

📚 代码演示:

#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;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{			
			printf("%d ", parr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

📑 代码结果:
【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针

💬 数组指针

  ⛳️ 指针数组我们学完了那么,数组指针大家也可以理解理解!整形指针是用来存放整形地址的指针,那么数组指针是用来干什么呢?

  • 所以数组指针是用来存放数组的地址的指针指针变量。

💭 数组指针的定义

  ⛳️大家都知道 int* p1[10] 指针数组是这样定义的。那么数组指针该怎么定义的 其实是这样的 int (*p2)[10];,这就是数组指针的定义

  • 其实可以把 (*p2)里面的 * 说明了 p2是个指针变量
  • int ()[10] 则说明了 p2 指向的是个数组

🔥 注:[ ]的优先级要高于号的,所以必须加上()来保证p先和结合。

📚 代码演示:

#include <stdio.h>
int main()
{
	int arr1[] = { 1,2,3,4,5 };
	int (*p)[5] = &arr1;
	return 0;
}

💭 &数组名VS数组名

  ⛳️ 数组指针的定义我们知道怎么定义了那么,该如何给数组指针符值呢?既然要给数组指针赋值那么我们先了解&数组名VS数组名有什么区别!

  • 我们来看一下这段代码

📚 代码演示:

#include <stdio.h>
int main()
{
 int arr[10] = {0};
 printf("%p\n", arr);
 printf("%p\n", &arr);
 return 0;

📑 代码结果:
【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针

诶,很多铁汁们一看就会发现这俩地址是一样,难道两个是一样的吗?

  • 我们知道arr是数组名,数组名表示数组首元素的地址。
  • 那么&arr到底代表了什么?
    下面在看这段代码大家就明白了!

🔥 注:在上一章指针的运算我们详细讲解了,数组的地址是什么。《指针的运算》

📚 代码演示:

#include <stdio.h>
int main()
{
 int arr[10] = { 0 };
 printf("arr = %p\n", arr);
 printf("&arr= %p\n", &arr);
 printf("arr+1 = %p\n", arr+1);
 printf("&arr+1= %p\n", &arr+1);
 return 0;
}

📑 代码结果:
【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针
从这里其实就可以看到,&arr+1 跳过的是整个数组的地址。而 arr 只是数组首元素的地址
总结:

  • &arr 表示的是数组的地址,而不是数组首元素的地址。
  • 本例中 &arr 的类型是: int(*)[10] ,是一种数组指针类型
  • 数组的地址+1,跳过整个数组的大小,所以 &arr+1 相对于 &arr 的差值是40

💭 数组指针的使用

⛳️介绍了这么多终于来到了指针数组的使用了,我们下面就给大家演示一遍吧!

📚 代码演示:

#include <stdio.h>
int main()
{
 int arr[10] = {1,2,3,4,5,6,7,8,9,0};
 int (*p)[10] = &arr;//把数组arr的地址赋值给数组指针变量p
 //但是我们一般很少这样写代码一般都是在函数里面接收数组时使用
 return 0;
}

📑 代码结果:

这里我们就可以看到如果接收整个指针数组的地址,使用的指针级别出现问题程序就会崩溃!

【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针

📖 数组指针(实例)

⛳️这里我们就采用指针数组介绍指针和普通的方法接收数组来演示一下。

  • =其实二维数组的本质就指针数组==

📚 代码演示:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void print_arr1(int arr[3][5], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		int j = 0;
		for (j = 0; j < col; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}
void print_arr2(int(*arr)[5], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		int j = 0;
		for (j = 0; j < col; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}
int main()
{
	int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 };
	print_arr1(arr, 3, 5);
	//数组名arr,表示首元素的地址
	//但是二维数组的首元素是二维数组的第一行
	//所以这里传递的arr,其实相当于第一行的地址,是一维数组的地址
	//可以数组指针来接收
	print_arr2(arr, 3, 5);
	return 0;
}

📑 代码结果:
【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针

📝全篇总结

✅ 归纳:
好了以上就是关于 指针数组 or 数组指针 的全部区别和知识点已经讲解清楚了!
  指针数组的定义与使用
  数组指针的概念
  数组名 or &数组名的区别
  数组指针的使用
☁️ 好了这下关于 指针数组 or 数组指针的概念相信大家就有一定理解了,其实只要类比一下就很好掌握
看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注

💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?,《C语言进阶篇》,c语言,开发语言,c++,指针文章来源地址https://www.toymoban.com/news/detail-604212.html

到了这里,关于【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】初阶指针(指针及其类型以及野指针)

    简单不先于复杂,而是在复杂之后。 目录 1. 指针是什么? 2. 指针和指针类型  2.1  指针+-整数 2.2 指针的解引用  3. 野指针  3.1 野指针成因  3.2 如何规避野指针  指针理解的两个要点: 1. 指针是内存中最小单元的编号,也就是地址。 2. 平时口语中说的指针,通常指的是指

    2023年04月16日
    浏览(52)
  • C语言——指针详解(初阶)

    在C语言学习过程中,指针算一个难点。我总结所学的指针知识,写一篇博客,希望大家对指针的知识理解的更通透。 每个内存都有一个唯一的编号,这个编号也被称为地址,C语言创建变量。都要在内存上开辟空间。 编号= = 地址 = =指针 我们可以通过(取地址操作符)取出变

    2024年02月16日
    浏览(40)
  • 初阶C语言-指针

    🌞 . ◡̈ ᴴᴬᵛᴱ ᴬ ᴳᴼᴼᴰ ᵀᴵᴹᴱ我们终会上岸,无论去到哪里都是阳光万里,鲜花灿烂 ₍ᐢ •⌄• ᐢ₎ 今天我们一起学习一下指针的相关内容吧! 📖指针是什么呢? 1.指针是内存中的一个最小单元的编号,也就是地址。 2.平时口语中说的指针就是指针变量,是用

    2024年02月12日
    浏览(40)
  • 【C语言】指针----初阶

    💓 博客主页:江池俊的博客 ⏩ 收录专栏:C语言初阶之路 🎉如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 一、指针是什么? 1.1指针与内存间的关系 内存 1.2指针变量存放地址 二、指针和指针类型 2.1指针有哪些类型? 2.2指针类型的意义是

    2024年02月15日
    浏览(36)
  • C语言——指针初阶

     哈喽,大家好,今天我们来学习C语言中的指针,今天主要学习初阶指针,后期我们将继续学习指针进阶。 目录 1. 指针是什么 2. 指针和指针类型 2.1 指针+-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针+-整数 4.2 指针-指针 4.3 指针的关

    2024年02月05日
    浏览(79)
  • 【C语言】指针初阶

     哈喽,大家好,今天我们来学习C语言中的指针,今天主要学习初阶指针,后期我们将继续学习指针进阶。 目录 1. 指针是什么 2. 指针和指针类型 2.1 指针+-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针+-整数 4.2 指针-指针 4.3 指针的关

    2024年02月09日
    浏览(42)
  • 初阶C语言——指针

    Hello,我们又见面了,时间过的好快啊,转眼间也已经写了这么多份博客了,在接下来的一年里,小编也会认真学习的敲代码,我们一起进步,那今天开始讲我们的指针,指针这一章节在C语言的学习中是比较难的一章节,废话不多说,开始我们的学习吧。 1. 指针是什么? 指

    2024年02月13日
    浏览(44)
  • 【C语言】初阶指针

    指针是一种用来存储变量地址的变量类型。它可以指向任何数据类型,包括基本数据类型(如整数、字符等)和复合数据类型(如数组、结构体等)。通过指针,我们可以间接地访问或修改存储在特定内存地址上的数据。 指针是内存中一个最小单元的编号,也就是地址。 平

    2024年02月12日
    浏览(39)
  • C语言指针(初阶)

    嘻嘻,家人们,今天咱们剖析一下指针,好啦,废话不多讲,开干! 假设有一栋宿舍楼,把uu们放在楼里面,楼上有100个房间,但是房间没有编号,此时如果uu们的朋友来找uu们玩的话,就得挨个房间去找,这样子的话,效率很低,但是如果我们根据每个楼层与楼层的放假情况,给每个房间进行编号

    2024年02月20日
    浏览(46)
  • c语言初阶指针

    目录 何为指针 地址大小 野指针 成因   如何规避  有效性 指针计算 +-整数 ​编辑  指针比较运算 指针-指针 ​编辑 数组与指针关系 二级指针 指针数组 应用  指针就是 指针变量 ,用来存放内存空间的一个编号,将指针比作我们宾馆的客人,内存空间就是一个个的房间,

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包