带领大家认识 :指针数组,浅浅分析:数组名与&数组名的区别联系

举报
念君思宁 发表于 2023/02/15 14:08:51 2023/02/15
【摘要】 带领大家认识 :指针数组,浅浅分析:数组名与&数组名的区别联系

对于刚刚见到指针数组的小白而言,需要知道:指针数组是指针?还是数组??

那么请问:热爱学习的你是个好孩子,你你是好呢?还是孩子呢??

答案显而易见:指针数组是个数组!!

由:整型指针 : int * point ;能够指向整型数据的指针!(存放整型变量的地址)

      浮点型指针: float *pf ;能够指向浮点型数据的指针!(存放字符变量的地址)

那么:数组指针应该是:能够指向数组的指针!(存放数组的地址)

下面笔者用代码来带领大家分析:

    int a = 10;
	int* p1 = &a;

在上述代码中p1 的类型为:int * ;(去掉名字剩下的就是类型)

因此,对于:

 
	char ch = 'w';
	char p2 = &ch;

在上述代码段中:p2的类型为: char *;(去掉名字剩下的就是类型)

因此对于一个数组:

	int arr[10] = { 1,2,3,4,5 };
	int(*pa)[10] = &arr;

由: &arr 取出的是数组的地址,存放到pa中,pa 是数组的指针变量

*pa :指向10个元素为int类型的数组!

因此:

int(*pa)[10] = &arr;

为数组指针:

数组指针的类型为:int (*)[10];

即:

	int* p[5];
	int(*p)[5];

是两个不同的指针!请大家分清楚!!!

前者为:指针数组,后者为:数组指针!

数组名与&数组名的区别联系

对于数组名,大家并不陌生!

在笔者下面的内容需要用到:数组名是数组首元素的地址!

有俩个列外需要大家注意:(1)sizeof(数组名) 在这里数组名表示整个数组!

(2)&(数组名) 取出的是整个数组的地址!

希望大家谨记!!!

列如:

	int arr[10] = { 0 };
	int(*p)[10] = &arr;

在上述代码段中,&arr 的类型为: int (*)[10] ;是一种指针类型!

数组的地址+1,跳过整个数组的大小!!

言归正传,上面是笔者进行下面代码的基础知识,及其扩展,希望大家认真思考笔者将要进行的内容!

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

在上述代码中,代码的内容显而易见,在此笔者就不做过多的讲述!

需要强调的就是:%p是用来打印地址的!!

下面请看笔者的代码运行结果为:

根据代码的运行结果,我们可以看出来:

 
	printf("%p\n", arr);
	printf("%p\n", &arr[0]);
	printf("%p\n", &arr);

运行结果一样!因此地址也是一样的!

	printf("%p\n", arr);
	printf("%p\n", arr+1);
 
 
	printf("%p\n", &arr[0]);
	printf("%p\n", &arr[0]+1);

由地址的最后数字的改变可以看出来:(8——》’C‘(12))跳过了四个字节!一个int !

然而:由:


  1. printf("%p\n", &arr);

  2. printf("%p\n", &arr+1);

这个的运行结果:(68——》90)可以看出来:跳过了整个数组的大小!!

所以出现那个运行结果的差距!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。