系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 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));
}
}
}
注意:本质就是通过数组指针对二维数组进行操作
总结
指针数组的核心就是数组中存的是地址,数组指针的最大优点对一维数组/二维数组进行操作。所以只要我们编写数组时尝试用数组指针操作它就可以快速掌握它。