数组的基本概念
数组:具有相同类型的若干变量的有序集合,是一种复合类型。
对于同一个数组,其所有元素的数据类型都是相同的。
数组名的书写规则应符合标识符的书写规定。
数组名不能与其他变量名相同。
方框号中常量式表示元素的个数,其下标从0开始计算。
允许在同一个类型说明中,说明多个数组和变量。
一维数组
类型说明符
数组名【常量表达式】={值,值....值};
int a[5]={1,2,3,4,5}
void main (void){ int i,a[10]; for(i=0;i<10;1++) a[i]=2 * i + 1; for(i=0;1<=9;i++) printf("%d",a[i]); }
二维数组
数据类型 数组名【数组长度】【数组长度】
int a[5][3]={{85,25,45},{13,64,97},{76,94,85},{49,68,75},{74,85,96}};
int a[][3]={85,75,92,61,65,71,59,63,90,85,87,64,46,88,97};
void main(void){ int i,j,s = 0,v[3]; int a[5][3]=(85,85,85,74,74,74,96,96,96,41,41,41,52,52,52); for(i=0;i<3;i++){ for(j=0;j<5;j++){ s=s + a[j][i]; } v[i]=s/5; s=0; } printf("数学:%d\nC语言:%d\n物联网:%d\n",v[0],v[1],v[2]); }
字符数组
用来存放字符量的数组成为字符数组
char c[10]={'c','p','r','o','g','r','a','m'};
char c[]={'c','p','r','o','g','r','a','m'};
char c[]={cporgram};
void main(void){ int i,j; char a[][5] = {{'B','A','S','I','C',},{'d','B','A','S','E'}}; char c[] = "C porgram"; for(i=0;i<2;i++){ for(j=0;j<5;j++) printf("%c",a[i][j]); printf("\n"); } for(i=0;i<9;i++){ printf("%c\t",c[i]); } printf("\n%s",c); }
指针
一个指针是一个地址,是一个常量。而一个指针却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。为了避免混淆,我们约定:“指针”是指地址,是常量。“指针常量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。
对内存变量的定义包括三个内容:
①指针类型说明,即定义变量为一个指针变量;
②指针变量名;
③变量值(指针)所指的变量的数据类型。
类型说明符*指针名=&变量名;
其中类型说明符表示本指针变量所指向的变量的数据类型,*表示这是一个指针变量,&表示去表两名对应的内存地址。
指针变量作为函数参数
函数的参数不仅可以是整形、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。
swap(int *p1,int *p2){ int temp=*p1; *p1=*p2; *p2=temp; } void main(void){ int a,b; scanf("%d,%d",&a,&b); swap(&a,&b); printf("%d,%d\n",a,b); }
指针与数组
一个变量有一个地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。
一个数组是由连续的一块内存单元组成的。数组名就是这块连续单元的首地址。一个数组元素的首地址也是指它所占有的几个内存单元的首地址。
指针变量可以实现本身的值的改变。如p++是合法的,表示下一个数组元素的地址;而a++是错误的。因为a是数组名,它是数组的首地址,是常量。
指向指针的指针
指针可以指向基本类型,也可以指向符合类型,因此也可以指向另一个指针变量,称为指向指针的指针。
void main(){ int i=10; int *p=&i; printf ("%d\n",*p);//10 int **pp=&p; printf("%d\n",**p);//10 }