1、概念:
通常指的是存储内存地址的变量,每一个地址都要定义对应类型的指针来存储
2、定义:
指针指向的数据类型 * 指针名;
int *p; //p为指向int型数据的指针,或者p中可以存放int型数据的地址
3、初始化:
int a = 100;
int *pa = &a; //对pa初始化
4、使用:
1》 指针不能直接赋整型数,例如:
int *p = 0x12342; //错误
2》 赋值时,要注意左值和右值类型对应,例如:
int a = 100;
float b = 2.5;
int *pa;
pa = &a; //正确的
pa = &b; //错误
通常指的是存储内存地址的变量,每一个地址都要定义对应类型的指针来存储
2、定义:
指针指向的数据类型 * 指针名;
int *p; //p为指向int型数据的指针,或者p中可以存放int型数据的地址
3、初始化:
int a = 100;
int *pa = &a; //对pa初始化
4、使用:
1》 指针不能直接赋整型数,例如:
int *p = 0x12342; //错误
2》 赋值时,要注意左值和右值类型对应,例如:
int a = 100;
float b = 2.5;
int *pa;
pa = &a; //正确的
pa = &b; //错误
5、不管什么类型的指针,在内存中都占4个字节(32位cpu)
6、指针的三要素:
当定义一个指针,且给它初始化之后,例如:
int a = 100;
int *pa = &a;
对于pa来说,有三个表达式的含义需要大家务必搞清楚:
*pa 表示pa指向的数据
pa 表示pa的值(内容)
&pa 表示pa在内存中的地址
7、指针的运算:
1》赋值运算:=
注意:赋值时左值和右值类型必须要匹配
2》取值:*
int a = 100;
int *pa = &a;
printf("*pa = %d\n",*pa); //*pa 就是取pa指向的数据
3》取地址:&
表示指针在内存中的地址。
4》加法运算:
指针只能加一个整数n,表示加n倍的指针指向的数据的长度
5》减法运算:
1)指针可以减一个整数n,表示减n倍的指针指向的数据的长度
2)同类型的指针之间可以相减,结果为整型数例如:
#include <stdio.h>
int main(void)
{
short a[8] = {1,2,3,4,5,6,7,8};
float b[8] = {1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8};
short *pa = &a[7],*qa = &a[3];
float *pb = &b[7],*qb = &b[3];
printf("pa:%p\n",pa);
printf("qa:%p\n",qa);
printf("pa - qa = %d\n",pa - qa);
printf("pb:%p\n",pb);
printf("qb:%p\n",qb);
printf("pb - qb = %d\n",pb - qb);
return 0;
}