------- IOS培训、android培训、期待与您交流! ----------
1.指针的概念
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
2 指针的类型。
先列出一些指针的类型,简单的认识一下
(1)int *ptr; //指针的类型是int *
(2)char *ptr; //指针的类型是char *
(3)int **ptr; //指针的类型是 int **
(4)int (*ptr)[3]; //指针的类型是 int(*)[3]
3.指针的定义:
对指针变量的类型说明包括三个内容:
(1)指针类型说明,即定义变量为一个指针变量;
(2)指针变量名;
(3)变量值(指针)所指向的变量的数据类型。
一般形式:类名标识符 *指针变量名;
例如:
int *a;
float *b;
之中 * 是指针类型的一个说明符,他是和 int 组合来表明 ,后面定义的数据类型是指针类型,* 不是变量名的一部分。
例如上面 int * 以及float * 是指针类型 a 和 b是变量名。
4.给指针变量赋值
//定义一个int类型的变量
int a=0;
//定义一个指向int变量的指针变量p
int *p;
//将a变量的地址赋值给p
p=&a;
注:&符号是取变量a 的地址赋值给P,这样p就指向了int类型的变量a
我们还可以在定义指针同时赋值,例如
int *p=&a;
5.指针的运算
当我们在上面那样声明以及赋值以后,我们就可以间接的操作变量a的值
之前我们操作a的值应该是:
a=10;
现在我们可以通过指针,达到一样的效果:
*p=10;
这样执行
printf("修改后,a的值:%d", a);
打印出: 修改后,a的值:10
上面是通过指针,更改指针所指向变量的值。那么这就是赋值操作,那么取值操作呢?一样简单
//定义一个int变量b
int b=0;
此时如果我们打印b的值,肯定是 b=0;
现在我么讲变量a的值,取出来赋值给b,有两种方式:
1〉不使用指针
b=a;
2〉使用指针,就是
b=*p; //*符号就是将p指向的变量的值取出来
6.指针使用注意点
在指针变量没有指向确定地址之前,不要对它所指的内容赋值。下面的写法是错误的
int *p;
*p = 10; //这是错误的
正确的方式应该是:
// 定义2个int型变量
int a = 6, b;
// 定义一个指向变量b的指针变量p
int *p;
p = &b;
// 将a的值赋值给变量b
*p = a;
需要注意点:
1.指针变量是用来保存地址的
2.指针变量里保存的地址可以修改
3.指针变量可以指向特殊的数据类型(结构体、函数、指针)
4. 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘/0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
5. 对字符数组作初始化赋值,必须采用外部类型或静态类型,如: static char st[]={“C Language”};而对字符串指针变量则无此限制,如: char *ps="C Language";
6. 对字符串指针方式 char *ps="C Language";可以写为: char *ps; ps="C Language";而对数组方式:
static char st[]={"C Language"};
不能写为:
char st[20];st={"C Language"};
------- IOS培训、android培训、期待与您交流! ----------