指针

目录 : 1.什么是指针

          2.指针类型以及不同指针类型会产生什么误差

          3.野指针

          4.指针运算

          5.指针和数组

          6.二级指针

          7.指针数组

前言:指针作为C语言最重要的一个知识点,希望将它理解并且运用到代码中.


1 .指针的概念 :书上过于专业化   ----通俗理解为指针就是地址.  指针变量就是存放地址的变量.

指针在32平台上是占4B(字节)  ,   在64平台上占位8B(字节) .

eg : int *p=&a;  //&表示取地址符  ,取出为一个地址  .所以指针可以想象成是地址.

2.指针类型 : 决定了进行解引用操作能够访问空间的大小.

eg : int *p ==>访问4个B

       char *p ==>访问1个B

       double *p ==>访问8个B

指针类型决定了指针走一步走多远(指针步长).

eg : int *p+1 ==>向右移动4B.

3.野指针 : 指向的位置不可知,指向空间是非法的.

野指针有以下情况 : (1).指针未初始化,这样导致指针存放随机值.  int *p;//未初始化

                                (2).指针访问越界,在数组中  int a[5],  int *p=&a[5]; // 越界

                                (3).指针指向内存空间已经被释放了.  当函数被调用后,局部变量就被释放.

4.指针运算 : (1).指针+-整数

                     (2).指针-指针

  1.指针+-整数:

#include<stdio.h>

#define PI 5

int main()
{
    float value[PI];
    float *p;
    for(p=&value[0];p<&value[PI];)
   {
        *p++=0;  //指针++
   }
    return 0;
}

2.指针-指针: 是指针与指针之间的元素值,并不是数组哦!!

#include<stdio.h>

int main()
{
    int arr[9]={1,2,3,4,5,6,7,8,9};
    char a[5]={0};   //其中其他数值默认为0;

    printf("%d\n",&arr[8]-&arr[0]);   //求出中间元素的个数
    printf("%d\n",&arr[5]-&a[0]);  //error 因为只能在同一个内存空间中才可以减,同一个数组中
  
    return 0;
}

5.指针和数组

eg :   int arr[10];

arr--数组名为首元素地址;

&arr---取出整个数组的地址;

sizeof(arr)---计算整个数组大小;

&arr+1---跳过一个整数组.

#include<stdio.h>

int main()
{
    int arr[10]={1,2,3,4,5,6,7,8,9,0};
    int *p=arr;  //数组的首地址
    int sz=sizeof(arr); //整个数组大小
    for(int i=0;i<sz;i++)
   {
        printf("%d\n",*(p+i));  //*(p+i)进行解引用操作
    }
    return 0;
}

6.二级指针

int *p=&a;///表示一级指针;

int **pp1=&p; //表示二级指针;以此类推还有三级指针,n级指针. 

7.指针数组 : 重点在数组,表示存放指针的数组.

#include<stdio.h>

int main()
{
    int a=1;
    int b=2;
    int c=3;
    
    int *arr[3]={&a,&b,&c};  //指针数组 ,存放指针(地址)
    return 0;
}

eg : int *arr[3]={&a,&b,&c}

数组指针---则表示指针;

类推为  整型数组,字符型数组.

       

--坚持IT工作者!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值