C语言的中的指针变量具有高度的灵活性,它可以作为函数的参数的来使用。
函数返回值 函数名(。。。,类型名,*指针名,。。。);
也就是简单的将地址赋给函数作为函数的参数即可。特别注意的是,当函数参数为为指针,若实参为变量时提供的变量的地址,需要使用:&变量名。同样,当函数的形参为指针,若实参为数组名(数组名就是数组的首地址),
一维数组和指针
数组名就是数组的首地址。应为是数组的内容就是一个地址。
“”*指针名“”的表达方式就是变量的另外一个名字,数组也可以用指针表达,首先对比下变量的地址赋值,与数组名赋值给指针变量。
int i,*p=&i; //变量使用去地址,“&”用来取地址,赋值给指针
int a[10],*p=a;//数组直接把名字赋值给指针
可以看到,数组的首地址是可以赋值给指针变量的。、
数组的声明 类型名 数组名[长度];
通过指针应用数组元素
方法一:普通引用法—-直接访问数组的某个元素
int a[20];
int *p;
p=&a[5]; //取得元素的第6个元素
*p=10; //给第6 个元素赋值为10
这样只能给数组的中的一个元素赋值,若果要给元素中所有的元素赋值,可以用循环的赋值方法。
还有一点值得注意的是p=a; yu p=&a[0];等价这个语句的作用的是取得元素的守地址。
方法二:递加引用
可以用增量来实现普通方法的赋值。
int a[20];
int i;
p=a; //取得元素的首地址。
*(p+5)=10; //作用是给第六个元素赋值为10
还有就是可以用这个方法来实现给元素赋值为1
int a[20];
int i;
p=a;
for(int i=0;i<=20;i++,p++){
*(p+i)=1;
}
二维数组和指针
二维数组的首地址:
同一维数组一样,二维数组的数组名就是二维数组的首地址,首地址表达了二维数组的基本位置,简单的可以把二维数组当多个一位数组来使用。
二维数组的元素的地址
某元素的地址=首地址+某元素的行下标*行元素个数+列下标
重点:指针变量如何赋值,指针变量如何访问数组中的某个元素,下面写一个代码。来实现访问数组的最后一个元素。
#include<stdio.h>
void main (){
int a[3][2]={{0,0},{0,0},{0,0}};
int *p;
p=a[0]; //等加与p=&a[0][0];
*(p+2*2+1)=9; //*(p+5)=9;取得元素的最后一位元素
printf("%d",a[2][1]);
}
结果为9;
使用指针来访问二维数组中第i行还有第J列的元素
a[i][j]对应的(p+行下标i 行元素的个数 +行下标j),
a[0][0]对应的是(p+0*2+0) 即 (p +0 ); //表示第一个元素
a[0][1]对应的是(p+0*2+1) 即 (p +1 ); //表示第二个元素
a[1][0]对应的是(p+1*2+0) 即 (p +2 ); //表示第三个元素
a[1][1]对应的是(p+1*2+1) 即 (p +3 ); //表示第四个元素
a[2][0]对应的是(p+2*2+0) 即 (p +4 ); //表示第五个元素
a[2][1]对应的是(p+2*2+1) 即 (p +5 ); //表示第六个元素
这个很重要的,借鉴我们班长的,哈哈哈哈哈哈哈哈
换行就是*(a + i)
对应的取值形式就是 ( (a +i))
换列就是*a + i
对应的取值形式就是 *( *a + i)
即换行又换列就是*(a + i) + j
对应的取值形式就是( (a + i) + j)