C语言之指针数组
指针数组: 数组的所有元素都是指针类型数据(指针变量)。
定义形式: 类型名 *数组名[元素个数];
例如:char *name[10];
具体应用:一般用于处理一组字符串数据。
应用举例:
char *name[]={“Tom”,”Mike”,”Mary”,”Peter”};
for(i=0;i<4;i++)
puts(name[i]);
习 题
1、定义a为共有5个元素的一维整型数组,同时定义p为指向a数组地址的指针变量的语句为
:int a[5],*p=a;
2、设int x[ ]={1,2,3,4}, y, *p=&x[1]; ,则执行语句
y=(*--p)++后y的值为 --p为&x[0] 内容为:1 结果为1
此时x[0]值变为多少?
2
3、下面程序的输出结果为:6,10
int *ptr;
int arr[]={6,7,8,9,10};
ptr=arr;
*(ptr+2)+=2;
printf("%d,%d",*ptr,*(ptr+2));
4、若输入abcdef回车,写出程序的运行结果:6
#include "string.h"
func(char str[])
{int num=0;
while(*(str+num)!='')
num++;
return num;
}
void main( )
{ char str[10],*p=str;
gets(p);
printf("%d",func(p));}
数组作为函数的参数
一维数组名作函数参数
数组名:代表数组的首地址,即第一个元素的地址。
将数组名(数组首地址)作为函数参数传递给被调用的函数,在被调函数中可以通过这个首地址找到存放数组元素的存储单元位置,然后使用(包括修改)这个数组中的数据。这种方式仍然是值传递,但传递的参数不是数据值,而是地址值。
*简单变量与数组名作函数参数的区别 )
思考?
形参数组和实参数组可以同名吗?
既可同名,也可不同名。经过函数调用后,它们便都指向了内存中的同一段连续的存储单元。
形参数组元素的值改变后,返回时会影响实参数组元素值吗?
会直接影响。由于形参和实参两个数组在内存中因指向同一地址而共享这同一段内存造成的。
单向值传递: 实参值——>形参