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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵安庆 中级黑马   /  2016-5-9 21:26  /  970 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



1. 指针是C语言的灵魂.


#pragma mark - 02 [了解]变量的值与变量的地址-----------------------------
1. 变量在内存中的存储.
    1>变量的值:存储在变量中的数据,叫做变量的值
    2>变量的地址: 1个变量是由1个或者多个字节组成的,组成这个变量的低字节的地址,就是这个变量的地址.
    3>如何取出变量的地址   &变量名
2,什么是指针?
变量的地址就是指针!!
    其实这个变量的地址就是一个指针类型的常量,那我用什么来保存这个地址呢,这个就要用到我们的指针



#pragma mark - 03 [掌握]指针变量的声明-------------------------------------
指针就是地址,地址就是指针。是不是挺简单的,我们接下来看一个新的变量,指针变量
首先什么是变量?
变量是不是用来存储数据,数据是可以变化的。
int temp = 10;

那么什么是指针变量?
1,什么叫指针变量?
    用来存储地址的变量

2,有什么用?
    间接访问(通过指针变量可以间接的访问指针变量指向的另外1个变量)
举例找朋友还钱的故事 --[举借钱的例子]
可以直接找到他,是不是也可以跑到对方的家里去找他

3,声明
    1>数据类型* 指针变量名;
    int *p1; // 指针的类型可以是任意的基本数据类型
    2>*代表这不是1个普通变量,而是1个用来存储地址的指针变量

    "3>指针变量只能存储和指针类型相同的普通变量的地址
    int* p1;
    int *p1;
    int * p1;



#pragma mark - 04 [掌握]指针变量的初始化-----------------------------------------

1,正确的初始化步骤
    a. 先取出变量的地址.
    b. 将取出来的变量的地址赋值给指针变量.
int num =10;
int* p1 = #

2,&变量名;
其实这个是1个表达式.&是1个运算符  叫做取地址运算符
这个表达式的结果 是这个变量的地址.

ppt绘图说明 p1 &p1
3, int* p1;中p1和&p1的区别
    p1 操作的是p1这个指针变量. 可以取p1的值 也可以为p1赋值.
    &p1 拿到的是p1的地址.

"记得区别
变量,变量的地址
指针变量,指针变量的地址

#pragma mark - 05 [掌握]指针变量的使用------------------------------------------

1,使用指针间接的操作指针指向的变量.
格式: *指针变量名;  代表这个指针指向的变量.
[int num = 10;int* p1 = #*p1; *p1 = 100;]
    *p1; p1指针所指向的对象,也就是num
    *p1 = 100; p1指针所指向的变量
    "赋值既可以直接给值,也可以通过找到你家的地址,然后给你送一个值。

这个表达式的结果是指针指向的变量. 拿到看指针指向的变量.
    就可以为指针指向的变量赋值或者取值.


#pragma mark - 06 [了解]野指针------------------------------------------


1, 指针变量也是1个变量. 所以可以批量声明指针变量.[int* p1, *p2, *p3;]

2, 野指针.
    "我们声明1个指针变量,如果没有为其初始化.它就有可能指向了1块随机的空间,这就是野指针.
    若访问野指针指向的变量的时候,就会报错



#pragma mark - 07 [了解]NULL值------------------------------------------


1,NULL的作用
     NULL值代表指针变量不指向内存中的任何地址.这个NULL完全等价于0,所以,你也可以直接赋值给1个指针变量0

2,注意: 如果1个指针变量的值是NULL值.这个时候通过指针变量去访问指向的变量的时候 100%报错.(没有意义)




#pragma mark - 08 [了解]多个指针指向同1个变量-----------------------------------------

1. int num = 10;

    int* p1 = #
    int* p2 = p1;

    p1和p2指针都指向了num变量.



#pragma mark - 09 [掌握]指针作为函数的参数------------------------------------------


void test2(int arr[],int len){
    arr[0] = 10;
}
int main(){
    test2(arr,3);
    printf("arr[0] = %d\n",arr[0]);
}

指针作为函数的参数


1,指针作为函数的参数,在函数的内部去访问参数指针指向的变量的时候,其实访问的就是实参变量.
" 传过去的是地址值,通过地址值去找到对应的内存空间,然后去修改内存空间中的值,就间接的改变变量的值
void test3(int *p1){
    *p1 = 1000;
}
int main(){
    int num = 10;
    test3(&num);
    printf("num=%d\n",num);
}


2, 指针作为函数的参数,可以实现什么效果?
    函数的内部可以修改实参变量的值.



3 个回复

倒序浏览
地址 ,地址,地址
回复 使用道具 举报
以后会越来越烦躁
回复 使用道具 举报
加油吧,楼主,我也在指针中寻找方向....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马