【c语言学习笔记】指针数组和数组指针以及在做题的时候遇到的问题
2018-02-23 00:36
615 查看
第一次笔记:题目是【找出方阵每列中的最小元素及其所在的行号】,实际上是我对指针数组和数组指针理解不透彻导致访问并交换了错误的内存地址。
【指针数组】
1. 定义 int *p[M] ,arry[M];2. 初始化//可以通过循环来给指针数组初始化
int i,j;
for(i=0;i<M;i++)
{
p[i]=arry[i];
}3. 含义
指针数组,顾名思义,他是一个数组,根据运算符的优先级顺序,*p[M] ,[ ]的优先级大于 * ,p首先和[M]结合,再与*结合,表示这个数组是指针类型,每一个元素都是一个指针,指针数组存储的就是二维数组的每一行的首地址(虽然是线性存储但这么说易于理解),数组下标为二维数组第一个下标。
指针数组p[M]和二维数组arry[M]
的关系图如下:
【数组指针】
1. 定义int a[M]
,(*p)
;2. 初始化//在指针数组中可以直接通过数组名来给指针数组初始化
p = a;
3. 含义
指针数组通过圆括号,使得 * 首先与p结合,说明p是指针变量,然后再与
结合,说明指针变量p的基类型是包含N个元素的数组。数组指针,指的是数组名的指针,即指向数组的首地址的指针,指针要移动,必须要知道当前所指内容的大小,才能确定移动多少距离,移动的步长就是其指向的内容的字节数,所以,【N】指的是跨越的步长。
在指针数组中,p和a的基类型相同,因此p+1等价于a+1等价于a[1]。
附(一道简单的指针题目)://找出方阵每列中的最小元素及其所在的行号
#include"stdio.h"
#include"stdlib.h"
#define M 5
#define N 6
void getrand(int (*p)[]);//给数组获取随机数字
void findmin(int (*p)[],int a[],int []);//找出每列最小元素和行号
void outdata(int (*p)[],int a[],int []);//输出矩阵和每列最小元素以及行号
int main()
{
int arryOne[M]
,arryTwo
,h
;
getrand(arryOne);
findmin(arryOne,arryTwo,h);
outdata(arryOne,arryTwo,h);
return 0;
}
void getrand(int (*p)
)
{
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
p[i][j]=rand()%50;
}
}
}
void findmin(int (*p)
,int a
,int h
)
{
int i,j,min;
for(i=0;i<N;i++)
{
min=p[i][0];
for(j=0;j<M;j++)
{
if(min>p[j][i])
{
min=p[j][i];
h[i]=j;
}
}
a[i]=min;
}
}
void outdata(int (*p)
,int a
,int h
)
{
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%5d",p[i][j]);
}
printf("\n");
4000
}
for(i=0;i<N;i++)
{
printf("第%d列最小值是%d位于第%d行\n",i,a[i],h[i]);
}
}注意: 在for循环查找列最小的时候,不要忘记两层循环的范围不一致,因此N在外层,M在内层,次错误会导致交换范围外的不确定的值。
相关文章推荐
- C语言学习笔记(18) 指针数组和数组指针分析
- 算法学习笔记之四:巧妙运用指针解决链表、字符串、数组等问题(同向双指针VS对向双指针)
- c语言中字符串常见初始化时的问题,以及字符串数组与指针区别的分析
- 学习笔记——ajax传值数组对象中遇到的问题
- C语言深度剖析学习笔记-指针、数组、内存、函数
- c语言学习笔记(4)struct和union:柔性数组存储斐波那契数列以及union判断系统大小端
- 今天学习时突然联想到这样一个有趣但无用的问题:利用C语言(不能是其他语言)求两个整数的较大/小值-----要求不用if、三目?、switch、循环、数组、加减乘除求余、位运算符以及任何库函数
- 在c语言学习中的问题(一):数组指针,指针数组,二维数组的理解与区分
- C语言指针问题,初始化,赋值,以及字符数组,字符串常量等问题
- 数组和指针————C语言学习笔记1
- C语言中sizeof对数组和对指针操作的不同,以及sizeof中表达式赋值问题
- C语言学习笔记之成员数组和指针
- C语言学习笔记17——数组与指针
- C语言学习笔记(6)-如何从变量声明的表面上来区分指针数组和数组指针
- C语言学习笔记.指针4--数组指针和指向数组的指针变量(一)
- C语言学习笔记22——数组参数和指针参数
- 【C语言学习笔记】数组、字符串、指针
- php学习笔记数组与数据结构1(日期时间函数及遇到的问题解决)
- ios开发-c语言之指针和数组以及指针和字符串的学习
- C语言学习笔记【指针04】指针数组与指向指针的指针 推荐