Linux C数组与指针
目标
数组的基本概念、定义及使用方法
字符串的相关操作
指针的概念、定义及使用方法
指针类型的参数和返回值
指针与数组的关系
指向指针的指针
数组的基本概念
数组:把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合就是数组。数组(Array)也是一种复合数据类型,它由一系列相同类型的元素组成。数组的成员可以是基本数据类型,也可以是复合数据类型;数组类型的长度应该用一个整数常量表达式来指定。数组中的元素通过下标来访问。
例如:
count[0]=7;
count[1]=count[0]*2;
++count[2];
例子:定义和访问数组
#include<stdio.h>
main(){
int count[4]={3,2,},i;
for(i=0;i<4;i++)
printf("count[%d]=%d\n",i,count[i]);
return 0;
}
数组下标的表达式不仅可以表示储存单元中的值,也可以表示储存单元本身,也可以说做左值。
一维数组:类型说明符 数组名[常量表达式]={值,值,...,值};
例如:int a[5]={1,2,3,4,5};
二维数组:数据类型 数组名[数组长度][数组长度]
例如:int a[5][3]={{12,45,36},{45,78,52},{96,53,27},{16,94,38},{30,50,91}};
int a[5][3]={10,14,13,97,52,63,38,47,96,59,90,80,46,39,44};
int a[5][3]={{80},{40,0,52},{47,84},{95,64,37},{77,76,78}};
int a[][3]={10,14,13,97,52,63,38,47,96,59,90,80,46,39,44};
例子:一维数组
#include<stdio.h>
main(){
int i,a[10];
for(i=0;i<10;i++)
a[i]=2*i+1;
for(i=0;i<=9;i++)
printf("%d",a[i]);
return 0;
}
字符型数组
字符数组用来存放字符量的数组称为字符数组字符串可以看作一个数组;他的每个元素是字符型的。数组元素可以通过数组名加下标的方式访问,而字符串字面值也可以像数组名一样使用,可以加下标访问其中的字符,如:char c="Hello,word.\n"[0];字符串字面值是只读的,不能修改。初始化的字符串字面值比数组还长,比如:char str[10]="Hello,word.\n";
指针的基本概念
指针:指针是一个用来指示一个内存地址的计算机语言的变量或*处理器中的寄存器。指针一般出现在比较近的机器语言的语言。指针一般指向一个函数或一个变量;再把一个变量所在的内存单元的地址保存在另外一个内存单元中,保存地址的这个内存单元称为指针,通过指针和间接寻址访问变量。
对这指针变量的定义包括三个内容:
1)指针类型说明,即定义变量为一个指针变量;
2)指针变量名;
3)变量值(指针)所指向的变量的数据类型。
格式:类型说明符*指针名=&变量名;
*号:表示指针间接寻址运算符;&运算符的操作数必须是左值,因为只有左值才表示一个内存单元,才会有地址,运算结果是指针类型。*运算符的操作数必须是指针类型,运算结果可以做左值。
例如:用指针做函数的参数和返回值
#include<stdio.h>
int * swap(int * px,int * py)
{
int temp;
temp=*px;
*px=*py;
*py=temp;
return px;
}
main(){
int i=10,j=20;
int * p=swap(&i,&j);
printf("now i=%d j=%d * p=%d\n",i,j,*p);
return 0;
}
例子:指针
指针与数组
数组的指针是指数数组的起名地址,数组元素的指针是数组元素的地址。
例如:从10个数中找到最大值与最小值
指向指针的指针与指针数组
指针可以指向基本类型,也可以指向符合类型,因此也可以指向另一个指针变量,称为指向指针的指针。
如:int i;
int *pi=&i;
int **ppi=π
例如:指向指针的指针
#include<stdio.h>
main(){
int i=10;
int * p=&i;
printf("%d\n",*p);
int **pp=*p;
printf("%d\n",**pp);
return 0;
}