首页 > 其他分享 >数组指针

数组指针

时间:2023-03-25 21:05:39浏览次数:36  
标签:10 int 地址 数组名 数组 指针

一、概念

下面哪个是数组指针?

int *p1[10];
int (*p1)[10];

int (*p)[10];

解释:p先和*结合,说明p是一个指针变量,然后指向一个大小为10的整型数组,所以p是一个指针,指向整型数组,叫做数组指针。

注意:【】的优先级要高于号,所以必须加上()保证先跟p结合,形成指针,不然就是一个整型数组。

举个例子:

double *d[5]

写出他的数组指针。

书写顺序:

  1. 先写指针,说明这是一个指针变量,注意要用括号括起来!(*pd)
  2. 然后写出指向数组的元素个数 (*pd)[5]
  3. 最后写出指向这个数组的类型,写在最前面。 double* (*pd)[5]

总结:

先写中间,后写两边。

二、&数组名VS数组名

数组名只是单纯指向数组第一个元素的地址。

而&数组名是整个数组的地址

数组指针_数组名

数组名+1跳过了一个元素,而&数组名+1直接跳过整个数组!

数组指针_数组名_02

TIP:

数组名不是数组首元素地址的两个意外

1、sizeof(数组名)计算的是整个数组的大小,单位是字节

2、&数组名,表示整个数组,取的是整个数组的地址

三、数组指针的应用

一般用于二维数组的遍历。

代码的实现:

void print2(int (*p)[5],int r,int j)
{
	//p表示二维数组第一行的地址
	for (int i=0;i<r;i++)
	{
		for (int k=0;k<j;k++)
		{
			printf("%d ", *(*(p + i) + k));
		}
		printf("\n");
	}
}

int main()
{
	int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7 } };//二维数组的初始化
	print2(arr, 3, 5);//二维数组的首元素是第一行!
	return 0;
}

解析:

二维数组的数组名表示第一行数组的地址!

所以p表示二维数组的第一行元素的地址,*(p+i)表示第几行,而*(*(p+i)+k)就表示每一行的每一个元素,既可以遍历。

三、练习

看看下面的代码表示什么含义?

数组指针_数组名_03

第一个表示普通的整型数组

第二个表示存放指针的数组——指针数组

第三个表示数组指针,指向整型数组

第四个比较难。

思考方式:

首先他优先跟【】结合,所以本质是一个数组。

举个简单的例子:int arr[10]。

我们把数组名和【】都去掉,剩下的就是数组的类型!

我们也这么思考,把parr[10]去掉,此时剩下int (*)[5],所以就是一个数组指针,也就是这是一个数组,存放数组指针的数组!

该数组能够存放10个数组指针,每个数组指针能够指向一个数组,数组5个元素,每个元素是int类型。

四、一维数组、二维数组的传参

数组指针_数组名_04

一维数组传参时如果用数组接收,初始化或者不初始化都可以。

最后一个取的是一级指针的地址,所以要用二级指针接收,正正好。(本身数组名就是首元素的地址)

数组指针_数组_05

总结:

数组传参时,形参一般分两种情况接收。

第一种以数组的形式接收,第二种以指针的形式接收(因为数组名也可以看成首元素的地址)

若以数组的形式接收,一维数组初始化与不初始化都可以。

二维数组必须要列初始化。

若以指针的形式接收,二位数组的数组名表示第一行的地址,因此一般就用数组指针接收!

标签:10,int,地址,数组名,数组,指针
From: https://blog.51cto.com/u_15740457/6149613

相关文章

  • js 数组与对象的区别
    js数组与对象的区别 学习javascript的时候,我曾经一度搞不清楚”数组”(array)和”对象”(object)的根本区别在哪里,两者都可以用来表示数据的集合。 比如有一个数......
  • 由“交卷”功能引发的思考——对比两个字符串数组的差异
    最近在做一个答题系统,在交卷的时候需要判断客观题的答题情况客观题的题型有单选题、多选题、判断题其中判断题可以当做单选题处理,而单选题也可以当做标准答案长度为一的......
  • PHP二维数组排序|PHP二维数组去重
    二维数组排序functionarray_sort($arr,$keys,$order=0){ if(!is_array($arr)){ returnfalse; } $keysvalue=array(); foreach($arras$key=>$val){......
  • hdu-4630(树状数组)
    题目:Lifeisagame,andyouloseit,soyousuicide.Butyoucannotkillyourselfbeforeyousolvethisproblem:Givenyouasequenceofnumbera1,a2,...,an.T......
  • c语言当中while的条件为指针
    做第一个笔记记录一种是while(指针变量)/*char*str="string";while(*str){...(省略)str++;}*/while(*str) 的作用等同于 while(*str!=‘\0’)即就是当*s......
  • 数组模拟双向列表 洛谷 P1160 队列安排
    题目描述一个学校里老师要将班上N个同学排成一列,同学被编号为1~N,他采取如下的方法:1.先将1号同学安排进队列,这时队列中只有他一个人;2.2~N号同学依次入列,编号为i的同学入列方式......
  • 数组
    目录1.数组概念:2.数组的定义格式一:格式二:详解:注意点:3.数组的静态初始化完整格式:格式详解:注意点:简化格式:练习1:练习2:练习3:4.地址值5.数组元素访问格式:作用:代码示例:6.索引索......
  • go的环形数组
    packagemainimport( "errors" "fmt" "os")//使用一个结构体管理环形队列typeCircleQueuestruct{ maxSizeint//4 array[5]int//数组 head......
  • php:用数组实现多语言(PHP 7.4.2)
    一,适用的场景:   旧系统需要增加多语言,不想改变原有的运行环境,   所以没有使用gettext,选择简单的用数组来实现说明:刘宏缔的架构森林是一个专注架构的博客,地......
  • 去掉一组整型数组重复的值
    这个问题出现在诸多的前端面试题中,主要考察个人对Object的使用,利用key来进行筛选。letunique=function(arr){lethashTable={};letdata=[];for(leti......