C语言学习每天进步一点点之指针数组和数组指针

本文介绍了指针数组的概念,即数组中存储变量地址,以及数组指针的应用,重点展示了如何通过数组指针操作一维和二维数组。通过实例说明了它们在内存管理和高级编程中的作用。
摘要由CSDN通过智能技术生成

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

 这一篇章基本代表着我们从简单指针向着更深入的指针,进行迈进。


提示:以下是本篇文章正文内容,下面案例可供参考

一、指针数组是什么?

如其名从后往前翻译,数组中存的是地址(这是重点)

二、案例

1.

代码如下(示例):

#define _crt_secure_no_warnings 1
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
 

int main()
{
	 
	int a = 0,b = 0,c = 0;
	int* p[3] = {&a,&b,&c};

	for (int i = 0; i < 3; i++)
	{
		printf("%d", *p[i]);
	} 

 }

如上一种指针数组的表达方式/计算方法,

例如:p[0]中存的是a的地址,*p[0]等于a的值

2.

代码如下(示例):

#define _crt_secure_no_warnings 1
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
 
int main()
{
	 
	int  a[3] = { 1,2,3 };
	int b[3] = { 4,5,6 };
	int c[3] = { 8,9,10 };
	int* p[3] = { a,b,c };
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("%d ", *p[i] + j);
		}
		printf("\n");
		 
	}
 }
	 
 

 

注意:*p[0]中存的是a数组的全部内容,所以*p[0]+1就是数组a的第二个元素也就是2

如上两个案例就是指针数组的两个大体应用方式,本质就是数组中存的是变量地址或数组地址。

三、数组指针是什么?

数组指针从后往前翻译,就是指针最后指向数组(我的理解是指针最后指向几个内容)。与指针数组的区别:一个是指针指向数组,一个是数组中存地址 

注意:数组指针的表示方法之一是:int a[10] = 0; int  (*p)[10] = &a;

四,数组指针的案例

1

#define _crt_secure_no_warnings 1
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
 
int main()
{
	 
	int  a[3] = { 1,2,3 };
	int(*p)[3] = &a;  //将数组a的全部地址送到p中保存 3代表指针指向三个内容也就是指向1 2 3
	for (int i = 0; i < 3; i++)
	{
		printf("%d ", (*p)[i]);
	}

 }

注意:数组指针的根本目的就是对常规数组进行操作,这才是它存在的意义

2

#define _crt_secure_no_warnings 1
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
 
int main()
{
	 
	int  a[3][4] = { {1,2,3,4},{5,6,7,8},{9,11,12,13 } };
	int(*p)[3] = &a;   
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			printf("%d ",* (*(p + i) + j));
		}
	}

 }
	 

注意:本质就是通过数组指针对二维数组进行操作


总结

指针数组的核心就是数组中存的是地址,数组指针的最大优点对一维数组/二维数组进行操作。所以只要我们编写数组时尝试用数组指针操作它就可以快速掌握它。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值