【C语言进阶】指针数组 —— 数组指针

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


【C语言进阶】指针数组 —— 数组指针,《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语言进阶】指针数组 —— 数组指针,《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语言进阶】指针数组 —— 数组指针,《C语言进阶篇》,c语言,开发语言,c++,指针

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

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

  • prr[ 0 ] 可以访问指针数组里面的第一个数组
  • 既然能找到第一个数组那继续按照数组遍历里面的内容就OK了
  • par[ 0 ][ 0 ] 这个意思是找到指针数组里面存放的第一个数组的第一个元素
  • 看一下图其实大家就懂了
    【C语言进阶】指针数组 —— 数组指针,《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语言进阶】指针数组 —— 数组指针,《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语言进阶】指针数组 —— 数组指针,《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语言进阶】指针数组 —— 数组指针,《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语言进阶】指针数组 —— 数组指针,《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语言进阶】指针数组 —— 数组指针,《C语言进阶篇》,c语言,开发语言,c++,指针

📝全篇总结

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

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

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

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

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

相关文章

  • C进阶 - 数组和指针

    用英文是因为有些东西得用他们的语言才能表达不失真 栈和堆 In C, a heap is a region of memory that is dynamically allocated during runtime. It is used to store variables and data structures that have a longer lifetime than the function call that created them.The stack, on the other hand, is a region of memory that is used for function

    2024年02月09日
    浏览(30)
  • 【再识C进阶2(中)】详细介绍指针的进阶——函数指针数组、回调函数、qsort函数

    💓作者简介: 加油,旭杏,目前大二,正在学习 C++ , 数据结构 等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏👀 🚚代码仓库:旭日东升 1👀 🌹欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖        在这一篇博客中,我们要认识并理解 函数指

    2024年02月09日
    浏览(35)
  • C语言 ——指针数组与数组指针

    目录 一、二维数组 二、指针数组 (1)概念  (2)书写方式 (3)指针数组模拟二维数组 三、数组指针 (1)概念 (2)使用数组指针打印一维数组  (3)模拟二维数组的传参 首先,我们要理解一下二维数组和指针变量之间的一些相关概念。 二维数组 : int arr [ 3 ][ 5 ]  

    2024年02月13日
    浏览(36)
  • C语言--指针详解(下)--字符指针、数组指针、指针数组、函数指针、函数指针数组(转移表)

    在C语言中有一种指针类型为字符指针 char*,常用其来表示字符,使用如下: 除了上述用法之外,还可以有以下的用法: 在上面的代码中,字符 \\\" hello word \\\"是常量字符串,将\\\"hello word\\\"放入 pstr 指针的实质是将第一个字符 “ h \\\" 的地址传递给了 pstr ,通过首字符 ” h \\\" 就可以访问

    2024年02月03日
    浏览(36)
  • 【进阶C语言】进阶指针--学会所有指针类型

     本节内容大致目录: 1.字符指针 2.指针数组(数组) 3.数组指针 (指针)--比较重要 4.函数指针--比较重要 5.函数指针数组--用的较少 6.指向函数指针数组的指针--只需要了解就可以 需要掌握每一种类型的符号和用处。 前言:字符指针是一种指针,是众多指针类型中的一种。

    2024年02月07日
    浏览(28)
  • 【go语言基础】指针数组和数组指针

    (1)指针数组: 存储指针的数组,也叫存储地址的数组,简单说就是存储地址的。 首先它是一个数组,数组中的元素都是指针(地址)。 (2)数组指针: 首先它是一个指针,存储的是指向数组的指针。 (1)指针数组 定义: 注意:首先是一个数组,将数组中的元素定义为

    2024年02月13日
    浏览(38)
  • 【C语言】指针的基本知识详细讲解(指针数组、数组指针、函数指针....

    接着上次的函数的基本知识,今天我们来讲一讲🔍指针 目录 一、指针的概念 二、指针变量 三、野指针 四、字符指针 五、指针与数组 六、指针数组 七、数组指针  八、指针与函数 总结 一、指针的概念 1.1、变量和地址 所谓指针,也就是内存的地址;所谓指针变量,也就是

    2023年04月08日
    浏览(31)
  • C语言:指针和数组(看完拿捏指针和数组)

    目录 数组名的理解: 一维数组:  解析:  字符数组:  解析:   解析: 字符串数组:  解析:   解析:  一级指针:   解析:   解析:  二维数组:  解析:  指针笔试题: 题一:一维数组 题二: 结构体指针 题三: 一维数组 题四: 二维数组 题五: 二维数组 题

    2024年02月11日
    浏览(31)
  • 『C语言进阶』指针进阶(一)

    🔥 博客主页 : 小羊失眠啦 🔖 系列专栏 : C语言 🌥️ 每日语录 : 无论你怎么选,都难免会有遗憾。 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 在C语言初阶中,我们对指针有了一定的了解,指针是个变量,是用来存放地址的,指针的大小是固定的4/8个字节,指针是有类型的

    2024年02月09日
    浏览(27)
  • 『C语言进阶』指针进阶(二)

    🔥 博客主页 : 小羊失眠啦 🔖 系列专栏 : C语言 🌥️ 每日语录 : 无论你怎么选,都难免会有遗憾。 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 在上篇指针进阶中,我们对字符指针、指针数组、数组指针以及数组传参和指针传参有了一定的了解,你以为指针进阶就只有这些内

    2024年02月07日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包