c语言数组和指针

本文深入探讨了C语言中一维数组和指针的关系,阐述了数组名作为指针的特性,以及如何通过指针操作数组。同时,介绍了二维数组的内存布局,展示了如何通过指针以一维方式理解和操作二维数组的行和列,强调了降维理解的重要性,并通过实例代码进行了详细解释。
摘要由CSDN通过智能技术生成

一维数组和指针

在这里插入图片描述
a为数组名,可以代表数组的首地址,等效于a[0]的地址
数组的地址是连续的

#include<stdio.h>
void main()
{
	int a[5], *p;
	p = a;
	for (int i = 0; i < 5; i++) 
}

在这里插入图片描述
p++,等效于a+i

二维数组和指针

在这里插入图片描述
二维数组的元素地址也都是连续的
可以降维以一维数组来理解


&a[0][0]表示第0行0列的地址,等效于a[0]+0,个人理解为(和一维数组a+0类似,即a[0]代表二维数组首地址,等效于a[0][0]地址)

#include<stdio.h>
void main()
{
	int a[5][5];
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			printf("%12d", &a[i][j]);
		}
		printf("\n");
	}	
}

在这里插入图片描述

#include<stdio.h>
void main()
{
	int a[5][5],*p;
	p = a[0];
	for (int i = 0; i < 5; i++)
	{
		printf("%d\n",p++);
	}	
}

p=a[0],等同于p=&a[0][0];p++等同于a[0]+n;


#include<stdio.h>
void main()
{
	int a[5][5], (*p)[5];
	p = a;
	for (int i = 0; i < 5; i++)
	{
		printf("%d\n",p++);
	}	
}

在这里插入图片描述
(*p)[5]代表的是一列,p=a等效于p=&a[0],代表第一列的第一个元素的地址赋值给指针变量p。后面的p++自增,每个都相差四个元素的地址,正好是第一列的全部元素的地址。
个人理解,(*p)[5]就是将某一列单独拿出来,降为一个一维数组,然后读取这个一维数组的地址


#include<stdio.h>
void main()
{
	int a[5][5], (*p)[5];
	p = &a[0];
	for (int i = 0; i < 1; i++)
	{
		printf("%d\n", p);
		printf("%d\n", p+1);
		printf("%d\n", *p+1);
		printf("%d\n", *(p+1));
	}	
}

在这里插入图片描述
个人理解,
p表示第一个盒子所在的位置,根据指针所讲,可知盒子所在的位置和里面存放的第一个内容相等
p+1表示第二个盒子所在的位置,根据指针所讲,可知盒子所在的位置和里面存放的第一个内容相等
*p+1表示第一个盒子里面的,第二个内容
*(p+1)表示第二个盒子里面的,第一个内容
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值