QQ个性网:专注于分享免费的QQ个性内容

关于我们| 网站公告| 广告服务| 联系我们| 网站地图

搜索
编程 JavaScript Java C++ Python SQL C Io ML COBOL Racket APL OCaml ABC Sed Bash Visual Basic Modula-2 Logo Delphi IDL Groovy Julia REXX Chapel X10 Forth Eiffel C# Go Rust PHP Swift Kotlin R Dart Perl Ruby TypeScript MATLAB Shell Lua Scala Objective-C F# Haskell Elixir Lisp Prolog Ada Fortran Erlang Scheme Smalltalk ABAP D ActionScript Tcl AWK IDL J PostScript IDL PL/SQL PowerShell

C语言入门教程:指向数组的指针

日期:2025/04/03 13:51来源:未知 人气:60

导读:指针变量也可以指向数组元素的内存地址,可以利用指针来访问数组的元素。当声明一个数组变量后,C编译器会为该数组分配连续的存储空间,用于存储数组内的元素,每个元素占用的空间为该元素所属数据类型的空间大小。一个指针变量可以指向一个数组,也可以指向一个数组元素。将一个数组的地址赋值给指针变量可以写为:p = a;该语句将数组a的首地址赋值给指针变量p。当把一个数组元素的首地址,一般是数......

指针变量也可以指向数组元素的内存地址,可以利用指针来访问数组的元素。当声明一个数组变量后,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

include

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个元素的内存地址赋值给了指针变量,然后通过指针的加减算术运算让指针指向数组不同元素的内存地址。在进行指针加减算术运算时,要特别注意指针不能越界,不能让指针指向数组元素以外的内存地址,否则程序会抛出异常。

关于我们|网站公告|广告服务|联系我们| 网站地图

Copyright © 2002-2023 某某QQ个性网 版权所有 | 备案号:粤ICP备xxxxxxxx号

声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告