C语言指针知识点

指针基本概念 

指针:就是内存的地址编号

指针变量:用来存放地址变量,通常所说的指针就是指针变量

定义指针 :格式  指针所指向的数据类型 *指针变量名称 int * a

作用 在定义变量的时候,*是一个类型说明符,说明定义这个变量是一个指针变量,在不是变量定义的时候,它是一个操作符,访问指针所指向的存储空间

&作用 取地址符,取出变量的地址,*与&是一对反操作符

指针的初始化步骤

 1 先定义指针变量然后初始化  int num=10 int *p ; 2 定义指针变量的同时进行初始化 int *#*p=20; 如果指针只有定义没有初始化,那么它里面是垃圾值,也就是它指向是不确定的,那么此时我们称这个指针为野指针

2 不能给指针变量直接赋值一个整形的数值

指针与函数:1 指针作为函数参数 

        1: 指针作为函数参数传递是地址传递

         2:如果你仅仅是在被调函数中,去修改变量本身的值,是不会影响函数中变量的值的

          3 基本数据类型作为函数参数是值传递

          4 数组作为函数参数是地址传递

2 指针作为函数的返回值(指针函数)

         1 不能使用局部变量的指针作为函数的返回值

          2 可以是指向堆内存和常量去的指针作为函数返回值 

3 函数指针:指向函数指针(重点)

     格式:所指向的函数的返回值类型(*指针变量名称)(所指向的函数的形藏列表)

    写一个函数指针的步骤

 1 ,把要指向的函数的头拷贝过来

 2 ,用小括号把函数名称扩起来

 3 ,在函数名称前面加 *

 4 ,修改函数名称为指针变量名称

让函数指针指向某个函数 pointer = 函数名称 同过函数指针调用 pointer(实参列表)

注意点:函数指针与所指向的函数,返回值类型和形参列表必须一致

指针与数组

 1 一维数组 1.1 指针像一个数组 使用数组方式和使用指针方式都可以去访问数组中某个元素

                     array[1] == pointer[1] == *(array+1) == *(pointer+1)

                    1.2 array = &array pointer != &pointer

                   1.3 指针的指向可以改变的,数组的指向时不可以改变的

                   1,4 当把一个数组赋值给一个指针变量的时候,有些信息就丢失了sizeof(array)!=sizeof(pointer)

2 指针数组:元素为指针的数组 指针类型 数组名称[数组的元素个数] 比如: int *nums[5];

3 数组指针:数组中元素数据类型(*pointer)[所指向的一维数组元素个数]

   数组指针与二维数组的数组名称相似

4 指针与二维数组 int nums[2][3] ={{12,13,14},{15,16,17}};

int (*pointer)[3] = nums;

*(nums+1) == nums[1] == *(pointer+1)它是加上一个一个一维数组所占用存储空间的字节数 int *p = nums[1] +1 == &num[1][1]

5 指针与字符串 

   1 保存字符串的方式 

       1 使用char类型的一维数组  char name[]= “zxc”;

       2 使用char类型的指针 char *name ="zxc"

       3 区别 1 字符数组是保存在栈中的,它里面的元素是可以任意的修改的 2 字符指针是一个指向常量的区指针,字符串中的元素是不可以修改的

     1 字符串数组 1 使用char类型的二维数组 char  names[][20] = {"nc","qd"}; 3 字符串数组 char *names = {"nc","qd"};

 6  内存分区 (掌握)

     从上到下

      栈:用来保存局部变量 ,它的内存由系统管理的

      堆:用来存储对象的,它是由程序员管理的

     全局区:用来存放全局变量和静态变量

     常量区:用来存放常量,只读的

     代码区:用来存放代码,只读的

7 const关键字  

    1 const修改普通变量说明这个变量是只读的

    2 const修改数组说明数组中元素是只读的

   3 const修饰指针

     const在*前面,说明指针所指向的存储空间是制度的

     const在*后面,说明指针的指向是不可以修改的

4 const用来形参

    1 函数内部不能修改函数外部的变量值

    2 告诉函数的调用者你可以放心把数据传入我不会修改你的内容

    5 const修饰函数的返回值

    8 动态存储空间的使用

       1 申请堆中的内存

          int *pointer = malloc(sizeof(int));

       2 使用内存 

             *pointer=20;

       3  使用完了需要手动释放

            free(pointer);

        4 清空指针

             pointer = NULL

       注意点 1 : 不能重复释放

                   2 堆中的存储空间在没有释放之前必须有一个指针指向这快内存,否则永远不能释放

  

 

 

 

 

 

    

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值