C语言——指针

指针 也叫指针地址,就是一块内存地址。

     int *p = &a;     // * 只是说明p是个指针变量
     *p = 9;     // * 是指针运算符,访问指针指向的变量a

      栈(stack):存储临时变量,系统自动分配 。先进后出。     
     堆(heap):手动申请的内存(malloc),需手动回收(free)。
     静态存储区域:常量、全局变量,不需要回收,直到程序结束运行。
     代码存储区域:存放代码的。




指针与数组
          1. 数组及其数组元素都占有存储空间,都有自己的地址,因此指针变量可以指向整个数组,
              也可以指向数组元素。
          2. 数组变量a是个 指针常量 ,里面存的是指针地址(例:int a[3];)
          3. 指针常量a,指向的是数组里面第一个元素。
         
          数组中的元素地址是连续的。
          通过对数组指针做加法运算,指向不同的元素,实现遍历每一个元素。
          int a[4] = {1,2,3,4};
          int *p = a;

          p++;     //a++是错误的,因为数组名a是个常量。

     a是指数组第一个元素的地址、&a是指整个数组的地址(虽然与a一样,但a+1指的是数组中第二个元素的地址,&a+1指整个数组的下一个位置的地址,大小是数组的大小。)


  利用指针交换:




指针函数:返回值为一个指针的函数叫指针函数。





函数指针:指针也可以指向一个函数。
          函数作为一段代码程序,在内存中也要占据部分存储空间。函数名就代表这函数的地址。




指向指针的指针:




void *指针:可以指向任意任何类型的指针。
          注:p1指针变量虽然没有指定类型,但是 void *p1 = &a;赋值之后,那么p1中存的就是
               a的地址,也就是一个int类型的指针地址。






野指针问题:指针定义时要初始化或指向NULL


运行出现:


  因为没有结束符( ‘ \0 ‘ )



利用指针拷贝
         1.  如下题,将数组a中的值拷贝到数组b3中


运行出现:

如果运行注释的内容则:


2. 


方法二适用于target所指的指针指向没有分配内存。


3.



字符串与指针的区别
      1. 字符数组声明的字符串可以修改其中的字符
         以指针的方式声明的字符串,后面的字符串是常量,不能修改。
      2. 把str2的内容拷贝到point2,数组指针要判断空值,并申请内存,最后释放内存。





使用库函数时要导入的包:
          strlen--<string.h>
          malloc--<stdlib.h>





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值