黑马程序员--C语言中的指针(2)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

数组指针变量的说明和使用

  指向数组的指针变量称为数组指针变量。 在讨论数组指针变量的说明和使用之前,我们先明确几个关系。 一个数组是由连续的一块内存单元组成的。 数组名就是这块连续内存单元的首地址。一个数组也是由各个数组元素(下标变量) 组成的。每个数组元素按其类型不同占有几个连续的内存单元。 一个数组元素的首地址也是指它所占有的几个内存单元的首地址。 一个指针变量既可以指向一个数组,也可以指向一个数组元素, 可把数组名或第一个元素的地址赋予它。如要使指针变量指向第i号元素可以把i元素的首地址赋予它或把数组名加i赋予它。

  设有实数组a,指向a的指针变量为pa,从图6.3中我们可以看出有以下关系: pa,a,&a[0]均指向同一单元,它们是数组a的首地址,也是0 号元素a[0]的首地址。pa+1,a+1,&a[1]均指向1号元素a[1]。类推可知a+i,a+i,&a[i] 指向i号元素a[i]。应该说明的是pa是变量,而a,&a[i]都是常量。在编程时应予以注意。

main(){

int a[5],i;

for(i=0;i<5;i++)

{ a[i]=i;

printf("a[%d]=%d/n",i,a[i]); }

printf("/n"); }

主函数 定义一个整型数组和一个整型变量 循环语句 给数组赋值 打印每一个数组的值 ...... 输出换行 ...... 数组指针变量说明的一般形式为: 类型说明符 * 指针变量名

其中类型说明符表示所指数组的类型。 从一般形式可以看出指向数组的指针变量和指向普通变量的指针变量的说明是相同的。 引入指针变量后,就可以用两种方法来访问数组元素了。   

第一种方法为下标法,即用a[i]形式访问数组元素。 在第四章中介绍数组时都是采用这种方法。   

第二种方法为指针法,即采用*(pa+i)形式,用间接访问的方法来访问数组元素。

main(){

int a[5],i,*pa;

pa=a;

for(i=0;i<5;i++)

{ *pa=i; pa++; }

pa=a;

for(i=0;i<5;i++)

{ printf("a[%d]=%d/n",i,*pa); pa++;

} } 主函数 定义整型数组和指针 将指针pa指向数组a 循环 将变量i的值赋给由指针pa指向的a[]的数组单元 将指针pa指向a[]的下一个单元 ...... 指针pa重新取得数组a的首地址 循环 用数组方式输出数组a中的所有元素 将指针pa指向a[]的下一个单元

下面,另举一例,该例与上例本意相同,但是实现方式不同。

main(){

int a[5],i,*pa=a;

for(i=0;i<5;)

{

*pa=i;

printf("a[%d]=%d/n",i++,*pa++);

} } 主函数 定义整型数组和指针,并使指针指向数组a 循环 将变量i的值赋给由指针pa指向的a[]的数组单元 用指针输出数组a中的所有元素,同时指针pa指向a[]的下一个单元

数组名和数组指针变量作函数参数

在第五章中曾经介绍过用数组名作函数的实参和形参的问题。在学习指针变量之后就更容易理解这个问题了。 数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址, 形参得到该地址后也指向同一数组。 这就好象同一件物品有两个彼此不同的名称一样。同样,指针变量的值也是地址, 数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用。

float aver(float *pa);

main(){

float sco[5],av,*sp;

int i;

sp=sco;

printf("/ninput 5 scores:/n");

for(i=0;i<5;i++)

scanf("%f",&sco[i]);

av=aver(sp);

printf("average score is %5.2f",av);

}

float aver(float *pa) {

int i;

float av,s=0;

for(i=0;i<5;i++)

s=s+*pa++;

av=s/5;

return av; }

时间: 2024-12-20 23:30:49

黑马程序员--C语言中的指针(2)的相关文章

黑马程序员--C语言中的指针(4)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 使用字符串指针变量与字符数组的区别 用字符数组和字符指针变量都可实现字符串的存储和运算. 但是两者是有区别的.在使用时应注意以下几个问题: 1. 字符串指针变量本身是一个变量,用于存放字符串的首地址.而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘/0’作为串的结束.字符数组是由于若干个数组元素组成的,它可用来存放整个字符串. 2. 对字符数组作初始化赋值,必须采用外部类型或静态

黑马程序员--C语言中的指针(5)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 指针型函数 前面我们介绍过,所谓函数类型是指函数返回值的类型. 在C语言中允许一个函数的返回值是一个指针(即地址), 这种返回指针值的函数称为指针型函数. 定义指针型函数的一般形式为: 类型说明符 *函数名(形参表) { …… /*函数体*/ } 其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针.类型说明符表示了返回的指针值所指向的数据类型. 如: int *ap(int 

黑马程序员--C语言中的指针(6)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本章小结 1. 指针是C语言中一个重要的组成部分,使用指针编程有以下优点: (1)提高程序的编译效率和执行速度. (2)通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯. (3)可以实现动态的存储分配. (4)便于表示各种数据结构,编写高质量的程序. 2. 指针的运算 (1)取地址运算符&:求变量的地址 (2)取内容运算符*:表示指针所指的变量 (3)赋值运算 ·把

黑马程序员--C语言中的指针(3)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 指向多维数组的指针变量 本小节以二维数组为例介绍多维数组的指针变量. 一.多维数组地址的表示方法 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11  设数组a的首地址为1000,各下标变量的首地址及其值如图所示.在第四章中介绍过, C语言允许把一个二维数组分解为多个一维数组来处理.因此数组a可分解为三个一维数组,即a[0],a[1],a[2].每一个一维

黑马程序员--C语言中的指针-我之笔记

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- -------------------------------指针--------------------------------- 指针? 内存单元的编号也叫做地址.既然根据内存单元的 号或地址就可以找到所需的内存单元,所以通常也把这个

黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

//指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的存储空间: int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针: *p = &a;//这样写就错了:此时*p表示取p指向的空间的值: 指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节,比

黑马程序员——c语言学习心得—— 指针

黑马程序员——c语言学习心得—— 指针 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,打开文件fopen(文件名,打开方式);例如:FILE *fp = fopen("a1","r");  返回的是文件的指针(文件在内存缓冲区的首地址)fopen函数反回值 是指向 a1文件的指针,通常赋值给一个指针变量关于文件名a1 也可以是一个“路径+文件名”   c:\abc.txt----------------

黑马程序员--C语言中的结构体

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 结构(struct)      结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合.  结构中可以使用不同的数据类型.      1. 结构说明和结构变量定义      在Turbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此,  象其它  类型的变量一样, 在使用结构变量时要先对其定义.      定义结构变量的一般格式为:       struct 结构名   

黑马程序员--C语言中的枚举

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是: #define MON  1 #define TUE   2 #define WED  3 #define THU   4 #define FRI    5 #define SAT   6 #define SUN   7 在此,我们定义一种新的数据类型,希望它能完成同样的工作.这种新