黑马程序员—C重点--指针

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ———


关于指针的重要知识点


定义格式

指针变量的定义格式: 
类名标识符 *指针变量名;(int *p;) 
其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类名标识符表示本指针变量所指向的变量的数据类型。

例如: int *p;表示p是一个指针变量,它的值是某个整型变量的地址。 或者说p指向一个整型变量。 
staic int *p1; /*p1是指向静态整型变量的指针变量*/ 
float *p2; /*p2是指向浮点变量的指针变量*/ 
char *p3; /*p3是指向字符变量的指针变量*/  
应该注意的是,一个指针变量只能指向同类型的变量,如p2 只能指向浮点变量,不能时而指向一个浮点变量, 时而又指向一个字符变量。


指针变量的赋值

指针变量的赋值只能赋予地址, 决不能赋予任何其它数据。在C语言中, 变量的地址是由编译系统分配的,C语言中提供了地址运算符&来表示变量的地址。

其一般形式为: & 变量名;  
如&a变示变量a的地址,&b表示变量b的地址。

1、先定义后赋值 
简单取值: 
int a = 10; 
int *p; 
p = &a; 
printf(“%d”, *p); 
简单改值: 
*p = 9;

2、定义的同时赋值 
int a = 10; 
int *p = &a;

注意: 
1)%p输出指针里面存储的地址值 
2)不能乱用类型,比如int a = 10; float *p = &a; 
3)不允许把一个数赋予指针变量,故下面的赋值是错误的:  
int *p; 
p=1000;  
4)被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的 
5)清空指针 
p = 0; 
p = NULL;


指针运算符

1、取地址运算符& 
取地址运算符&是单目运算符,其结合性为自右至左,其功能是取变量的地址。

2、取内容运算符* 
   取内容运算符*是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。


指针变量的运算

指针变量的赋值运算有以下几种形式:

1)指针变量初始化赋值,前面已作介绍。

2)把一个变量的地址赋予指向相同数据类型的指针变量。

例如: 
int a,*p; 
p=&a;  
把整型变量a的地址赋予整型指针变量p


4)指针变量指向数组

例如: 
int ages[5],*p; 
p=ages; (数组名表示数组的首地址,故可赋予指向数组的指针变量pa) 
也可写为: 
p=&ages[0]; (数组第一个元素的地址也是整个数组的首地址) 
相应的: 
p —> &ages[0] 
p + 1 —> &ages[1] 
p + 2 —> &ages[2] 
p + i —> &ages[i]

5)指针变量指向字符串

利用指针定义字符串 
char *name = “itcast”; 
char *names[5] = {“jack”, “rose”, “jake”};

特点:字符串其实是一个常量字符串,里面的字符是不能修改 
使用场合:字符串的内容不需要修改,而且这个字符串经常使用

6)把函数的入口地址赋予指向函数的指针变量

定义指向函数的指针: 
double (p)(double, char , int); 
p = haha; 
或者 
double (p)(double, char , int) = haha;

间接调用函数: 
1> p(10.7, “jack”, 10); 
2> (*p)(10.7, “jack”, 10);


总结

1、指针是C语言中一个重要的组成部分,使用指针编程有以下优点:

(1)提高程序的编译效率和执行速度。

(2)通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯。

(3)可以实现动态的存储分配。

(4)便于表示各种数据结构,编写高质量的程序。

2、指针的运算

(1)取地址运算符&:求变量的地址

(2)取内容运算符*:表示指针所指的变量

(3)赋值运算 
·把变量地址赋予指针变量 
·同类型指针变量相互赋值 
·把数组,字符串的首地址赋予指针变量 
·把函数入口地址赋予指针变量

(4)加减运算 
对指向数组,字符串的指针变量可以进行加减运算,如p+n,p-n,p++,p–等。对指向同一数组的两个指针变量可以相减。对指向其它类型的指针变量作加减运算是无意义的。

(5)关系运算 
指向同一数组的两个指针变量之间可以进行大于、小于、 等于比较运算。指针可与0比较,p==0表示p为空指针。

3、与指针有关的各种说明和意义见下表

int *p;     p为指向整型量的指针变量 
int *p[n];   p为指针数组,由n个指向整型量的指针元素组成。 
int (*p)[n];  p为指向整型二维数组的指针变量,二维数组的列数为n 
int *p()    p为返回指针值的函数,该指针指向整型量 
int (*p)()   p为指向函数的指针,该函数返回整型量 
int **p     p为一个指向另一指针的指针变量,该指针指向一个整型量。

4、有关指针的说明很多是由指针,数组,函数说明组合而成的。 
但并不是可以任意组合,例如数组不能由函数组成,即数组元素不能是一个函数;函数也不能返回一个数组或返回另一个函数。例如 
int a5;就是错误的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值