数组及指针 知识点总结.docx

上传人:b****3 文档编号:27453478 上传时间:2023-07-01 格式:DOCX 页数:14 大小:18.34KB
下载 相关 举报
数组及指针 知识点总结.docx_第1页
第1页 / 共14页
数组及指针 知识点总结.docx_第2页
第2页 / 共14页
数组及指针 知识点总结.docx_第3页
第3页 / 共14页
数组及指针 知识点总结.docx_第4页
第4页 / 共14页
数组及指针 知识点总结.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数组及指针 知识点总结.docx

《数组及指针 知识点总结.docx》由会员分享,可在线阅读,更多相关《数组及指针 知识点总结.docx(14页珍藏版)》请在冰豆网上搜索。

数组及指针 知识点总结.docx

数组及指针知识点总结

第9章数组

第1课

知识点一

定义一维数组

格式:

类型名数组名[元素个数]

例1定义一个包含4个整数的数组a

inta[4];

例2定义一个包含3个双精度数的数组b

doubleb[3];

注意:

C语言中数组的下界从0开始计数。

例如:

a[4]的4个元素分别为a[0]、a[1]、a[2]、a[3]

知识点二

一维数组的初始化

用一对大括号将数组的初值括起来。

例1inta[3]={1,2,3};

此例中a[0]值为1、a[1]值为2、a[2]值为3

 

例2inta[5]={0};

此例中数组a的全部元素值均为0

例3inta[3]={1,2,3,4};

此例中由于初值个数多于数组元素个数,所以非法。

例4inta[]={0,0,0,0};

此例中省略数组元素个数,初值为4个0

等价于inta[4]={0};

注意:

数组名是一个常量值,不能对它赋值。

例如:

inta[3];

a=5;此语句非法,应改为a[0]=5;

知识点三

一维数组应用

例1从键盘上输入10个整数,输出最大数和最小数。

#include

main()

{

inta[10],i,max,min;

printf("请输入10个整数:

\n");

 

for(i=0;i<=9;i++)

scanf("%d",&a[i]);

max=a[0];

min=a[0];

for(i=1;i<=9;i++)

{

if(a[i]>max)max=a[i];

if(a[i]

}

printf("最大数是%d\n",max);

printf("最小数是%d\n",min);

}

例2斐波数列的定义如下:

1、1、2、3、5、8、13、……

编程输出斐波数列的第40项值。

 

#include

main()

{

longa[40];

inti;

a[0]=1;

a[1]=1;

for(i=2;i<=39;i++)

a[i]=a[i-1]+a[i-2];

printf("%ld",a[39]);

}

 

练习题

1从键盘上输入10个整数,输出其中完全平方数之和。

2从键盘上输入10个整数,输出和平均数最接近的数。

 

第2课

知识点一

定义二维数组

格式:

类型名数组名[一维上界][二维上界]

例1定义一个2行2列的整型数组a

inta[2][2];

此例中数组a共有4个元素,分别是a[0][0]、a[0][1]、a[1][0]、a[1][1]。

例2定义一个4行4列的整型矩阵a

inta[4][4];

二维数组看成一维数组

例如:

a[3][4]看成由a[0]、a[1]、a[2]组成的一维数组,每个元素又是由4个元素组成的一维数组。

注意:

a[0]、a[1]、a[2]不是元素,而是数组每行首地址。

知识点二

二维数组的初始化

用嵌套的大括号将数组初值括起来。

 

例1inta[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};

例2inta[4][3]={{1,2},{4,5},{7},{10}};

此例中系统自动给空缺的地方补0

例3inta[4][3]={{1,2},{4,5}};

系统自动给后面的行补初值0

例4inta[4][3]={1,2,4,5};

此例中数组a的第一行中元素和第二行的第一个

元素依次为1,2,4,5其余全部为0

知识点三

定义二维数组大小

例1inta[][3]={{1,2,3},{4,5},{6},{8}};

有4个行花括号,因此说明是4行3列。

例2inta[][3]={1,2,3,4,5};

这种方式计算规则:

1)第二维数值能被初值个数整除

第一维数=商数

2)第二维数值不能被初值个数整除

第一维数=商数+1

因此上例中表示一个2行3列数组。

 

知识点四

二维数组应用

例1从键盘上输入5个学生3门课程的成绩,分别计算

每个学生的平均分和每门课程的平均分。

#include

#defineM5

#defineN3

main()

{

inta[M][N],i,j,sum;

printf("请输入15个分数(0-100):

\n");

for(i=0;i<=M-1;i++)

for(j=0;j<=N-1;j++)

scanf("%d",&a[i][j]);

printf("每个学生的平均分\n");

for(i=0;i<=M-1;i++)

{

sum=0;

for(j=0;j<=N-1;j++)

sum=sum+a[i][j];

printf("%4d",sum/N);

}

printf("\n");

printf("每门课程的平均分\n");

for(i=0;i<=N-1;i++)

{

sum=0;

for(j=0;j<=M-1;j++)

sum=sum+a[j][i];

printf("%4d",sum/M);

}

}

例2从键盘上输入一个4行4列整数矩阵,输出左上至

右下对角线元素之和。

#include

#defineM4

#defineN4

 

main()

{

inta[M][N],i,j,sum=0;

printf(“请输入16个整数:

\n”);

for(i=0;i<=M-1;i++)

for(j=0;j<=N-1;j++)

scanf("%d",&a[i][j]);

for(i=0;i<=M-1;i++)

sum=sum+a[i][i];

printf("%d",sum);

}

 

练习题

1从键盘上输入一个4行4列的整数矩阵。

输出此矩阵右上至左下对角线元素之和。

2从键盘上输入一个4行4列的整数矩阵。

输出此矩阵下半三角形的所有元素之和。

3从键盘上输入一个4行4列的整数矩阵。

输出此矩阵最外围元素之和。

 

指针

第1课

知识点一

定义一级指针

格式:

类型名*变量名

例1定义两个指向整型变量的指针p1和p2。

int*p1,*p2;

例2定义两个整型变量m和n及两个指针p和q,并使

p和q分别指向m和n。

intm,n,*p,*q;

p=&m;表示p存放变量m的地址

q=&n;表示q存放变量n的地址

例3定义一个包含10个整数的数组a和一个指针p,并

使p指向a。

inta[10],*p;

p=a;表示p指向数组a的首地址,即a[0]的地址。

注意:

例3中p=a不能写成p=&a,因为a本身就是地址。

 

知识点二

定义二级指针

格式:

类型名**变量名

假设已有下列定义:

int**p,*s,k=0;

例如:

s=&k;指针s指向变量k的地址

p=&s;指针p指向指针s的地址

此时p为指向指针的指针,即二级指针。

知识点三

指针间的赋值

假设已有下列定义:

int*q,*p,k=0;

q=&k;

例如:

p=q;表示两指针间赋值,读作p指向q。

此时p和q均指向变量k的地址。

知识点四

空指针

在C语言中空值用NULL表示,其值为0

 

定义指针时可以给指针赋值NULL

例如:

int*p=NULL;表示p没有指向任何地址

等价于p=’\0’;或p=0;

注意:

此时指针p没有实际单元,所以暂时不能访问。

例如:

int*p=NULL;

printf(“%d”,*p);此语句会产生出错信息

 

第2课

知识点一

通过指针引用存储单元

假设已有下列定义:

int*p,m,n=0;

p=&n;

例如:

m=*p;表示将p指向存储单元内容给变量m

等价于m=n;

*p=*p+1;等价于n=n+1;

注意:

*p=*p+1;还可以写成下面的形式

*p+=1;或++*p;或(*p)++;

 

知识点二

指针的移动

当指针指向一片连续空间时,移动才有意义。

假设已有下列定义:

inta[5],*p,*q,k;

p=a;

例如:

q=p+2;表示将q指向元素a[2]的地址

p++;表示将p向后移一个单元

q--;表示将q向前移一个单元

k=p[2];等价于k=a[3];

知识点三

指针的比较

若两指针指向一片连续空间,可比较大小。

假设已有下列定义:

inta[10],*p,*q,k;

p=a;

q=p+2;

例如:

if(p

由于条件成立,所以输出p小于q。

 

k=q-p;表示p和q相差的地址值

最后k值为2

 

第3课

知识点一

指向数组的指针

假设已有下列定义:

int*p,*q,k;

inta[3][3];

例如:

p=&a[2][2];表示p指向元素a[2][2]的地址

p=a[1];表示p指向数组a第二行的首地址

p++;此时p指向元素a[1][1]的地址

k=p[2];等价于k=a[2][0];

q=p-3;此时q指向元素a[0][1]的地址

k=q[1];等价于k=a[0][2];

(*p)++;此时元素a[1][1]的值加1

*q++;此时q后移一个单元,a[0][1]值不变。

k=*(a[1]+2);等价于k=a[1][2];

 

知识点二

指针数组

格式:

类型名*变量名[元素个数]

假设已有下列定义:

int*p[3],a[3][2],k;

此例中p是一个指针数组,包含3个元素,每个元素均为

一个指向int类型的指针。

将指针数组和二维数组关联

for(k=0;k<=2;k++)p[k]=a[k];

此时p[0]、p[1]、p[2]分别指向数组a每行的首地址。

例如:

p[0]=a[0];表示p[0]指向数组a第一行首地址

p[0]++;此时p[0]指向元素a[0][1]的地址

k=*(p[1]+1);等价于k=a[1][1];

k=p[2][1];等价于k=a[2][1];

注意:

p[k]和a[k]的区别

p[k]和a[k]两者均表示数组a第k+1行的首地址。

p[k]能被赋值,而a[k]是地址常量,不能被赋值。

例如:

a[0]=p[0];此语句非法,应改为p[0]=a[0];

 

知识点三

指针的应用

例1从键盘上输入两个整数,输出较大数。

(要求使用指针)

#include

main()

{

inta,b,*p,*q;

p=&a;

q=&b;

printf("请输入两个整数:

\n");

scanf("%d%d",p,q);

if(*p>*q)

printf("%d",*p);

else

printf("%d",*q);

}

例2从键盘上输入10个整数,输出最大数和最小数。

(要求使用指针)

 

#include

main()

{

inta[10],*p,k,max,min;

p=a;

printf("请输入10个整数:

\n");

for(k=0;k<=9;k++)

scanf("%d",&p[k]);

max=p[0];

min=p[0];

for(k=1;k<=9;k++)

{

if(p[k]>max)max=p[k];

if(p[k]

}

printf("最大数是%d\n",max);

printf("最小数是%d\n",min);

}

 

例3从键盘上输入一个4行4列的整数矩阵,输出左上至

右下对角线元素之和。

(要求使用指针)

#include

#defineM4

#defineN4

main()

{

inta[M][N],*p[M],k,j,sum=0;

for(k=0;k<=M-1;k++)

p[k]=a[k];

printf("请输入16个整数:

\n");

for(k=0;k<=M-1;k++)

for(j=0;j<=N-1;j++)

scanf("%d",&p[k][j]);

for(k=0;k<=M-1;k++)

sum=sum+p[k][k];

printf("%d",sum);

}

 

练习题

1从键盘上输入两个整数,输出它们的平方和。

(要求使用指针)

2从键盘上输入10个整数,输出所有完全平方数之和。

(要求使用指针)

3从键盘上输入一个4行4列的整数矩阵,输出最外围

元素之和。

(要求使用指针)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1