日期:2025/04/04 17:01来源:未知 人气:52
指针变量也可以指向数组元素的内存地址,可以利用指针来访问数组的元素。当声明一个数组变量后,C编译器会为该数组分配连续的存储空间,用于存储数组内的元素,每个元素占用的空间为该元素所属数据类型的空间大小。
一个指针变量可以指向一个数组,也可以指向一个数组元素。将一个数组的地址赋值给指针变量可以写为:
p = a;
该语句将数组a的首地址赋值给指针变量p。当把一个数组元素的首地址,一般是数组第一个元素的地址赋值给指针变量时,该指针变量是指向了数组第1个元素的内存地址,然后应用指针的加减运算就可以访问数组的全部元素。
上图描述了指针与数组元素内存地址的关系。array为具有三个短整型元素的数组,p为短整型的指针,p=array将数组array首地址赋值给p,此时指针变量p指向数组array的第1个元素,p+1指向第2个元素,p+2指向第3个元素。
一个指针变量既可以指向一个数组,也可以指向一个数组元素。如果要使指针指向数组的第一个元素,可以把数组名或第一个数组元素的地址赋值给该指针变量。如果需要该指针指向第i个元素的地址,可以把第i个元素的内存地址或数组名加i赋值给该指针。
int data[]={11,21,23};
int *p;
// 数组data第2个元素地址赋值给p
p = data+1;
// 或者
p = &data[1];
上面的代码将data数组的第2个元素的内存地址赋值给指针变量p。当指针变量p指向了数组元素或数组首地址后,就可以通过指针变量的自增或自减来访问数组的各个元素。
例【7-5】遍历数组的元素
程序清单 sample.c
void main()
{
// 声明数组data
int data[]={11,21,23,8,9,100};
// 声明执行int类型的指针变量
int *p,i;
// 数组首地址赋值给data
p = data;
// 输出数组全部元素
for(i=0;i<6;i++)
{
printf(第%d个数组元素=%d,内存地址=%d\n",i+1,*p,p);
p++;
}
}
程序输出结果如下图所示:
例7-5演示了如何使用指针遍历数组元素。指针变量p指向数组元素data的首地址,在第一次fou循环时,p存储的值为16250656,存储在该地址的值为11,然后p做自增操作,p存储的地址为16250660,该地址为data数组第2个元素的内存地址,存储在该地址的值为21,此过程持续到for循环结束。
使用指针访问数组元素时,需要注意指针指向的是数组元素的内存地址,当把数组名称赋值给指针变量时,实际是把数组第1个元素的内存地址赋值给了指针变量,然后通过指针的加减算术运算让指针指向数组不同元素的内存地址。在进行指针加减算术运算时,要特别注意指针不能越界,不能让指针指向数组元素以外的内存地址,否则程序会抛出异常。