A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 初见兔儿哥 中级黑马   /  2015-8-3 00:32  /  551 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、指针变量

用来存放地址的变量,就是指针变量

2、指针?

就是地址

3、指针变量的定义


数据类型  *指针变量名;


int *p;   //定义了一个指针变量,变量名是p
//int表示,p只能存放一个int类型的变量的地址

char *p1; //定义了一个指针变量,变量名是p1
//p1只能存放一个char类型数变量的地址

int num=10;
char *p = # //警告


4、指针变量定义的注意事项

1)“*”  必须得有,如果没有就相当于定义一个普通变量
2)指针变量能用来存放数值或者字符之类的吗? 不能
3)指针变量,归根结底还是变量,也有全局和局部变量之分

----------------------指针变量初始化和引用
指针变量也是变量
指针变量的使用: 定义指针变量  ----> 初始化指针变量 ---> 使用(使用指针变量间接的存取内存单元的值)

指针变量如果不初始化会有什么后果?
结论:如果一个指针变量定义以后,如果不进行初始化
     这个指针变量存放的事一个垃圾数,这个指针变量,称之为 野指针

一定要避免操作野指针,因为可能会带来意向不到的错误
    int *p10;  //值是一垃圾值,有可能存放是系统程序的地址
    *p10 = 438; //可能会造成系统崩溃

*******************************************************


两个指针变量之间的运算

1)两个指针之间的减法运算

(1)0x0006  - 0x0003   =  3  (意义不大)

(2)常见的用法:两个指针都指向同一个数组

i.判断两个指针变量指向的元素是否连续
ii.判断两个指针变量之间相隔几个元素

int a[5]={1,2,3,4,5};
int *p = a; //p指向了数组的第一个元素
int *p1 = &a[3]; //p指向了数组的第四个元素


注意:两个指针变量之间没有加法运算


2)两个指针之间的关系运算

// p1 > p
//1    表示p1在高位
//0    p在高位或者他们指向了同一个位置
二级指针:如果一个指针变量存放的是另一个指针变量的地址,则称此指针变量为二级指针
int *p=&a;int **p1=&p;
指针为什么要区分类型?
        不同类型的指针变量在内存中占用8个字节
        为什么都占用8个字节还要区分类型呢?
        //如果定义指针变量不定义类型,那么它在取*也就是在取其中的值的时候,就不知道应该读取几个字节,而定义了类型之后,如果是Int类型的就读四个字节,char类型的就读一个字节。

#warning---------->>>>>>>>>>>指针与数组<<<<<<<<<<<<<<--------------
数组指针 与指针数组,其中数组指针有分为一维数组指针 和二维数组指针

*******************************************************

数组指针:

    指向数组元素的指针

数组指针的作用:

    使用数组指针间接访问数组的元素

数组指针的定义:

    int *p;

数组指针的初始化:

    int a[4]={1,2,3,4};

    int *p = a;  //数组指针,定义了一个指针变量p赋值数组的首地址(第一个元素的地址),p指向数组的第一个元素

    int *p = &a[0]; //等价上面一句话

数组指针如何访问数组的元素:

    1)p+1   表示指向数组的下一个元素
    2)p-1   指向数组的上一个元素
使用数组指针和使用数组名的区别
    p = p+1
    *p++
   // p是一个指针变量,既然是一个变量,它存放的值是可以改变的
    printf(" *p++   = %d\n",*p++);
    printf(" *p = %d\n",*p);
//学习的误区:   数组名 a是一个常量  *(10++)
//数组名++ 这是错误的
   //printf(" *a++   = %d\n",*a++); //错误的
printf(" *a = %d\n",*a);

1 个回复

倒序浏览
学习了,指针是重点和难点
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马