指针及其相关的内容

目录

指针的概念

指针的初始化

指针越界访问

指针的三个类别

数组指针

1.概念

2.对于数组的指针引用的写法

指针数组

1.概念

2.写法

数组指针和指针数组的两者比较

1.共同点

2.写法区别

函数指针

表达方式+调用

如何避免野指针

跳过在二维数组的应用

二级指针

指针优化

字符数组和字符指针处理字符串的区别

1.用法

2.修改地址方面

数组中数据的使用

 数组指向


指针的概念

在 C 语言中,指针就像是一个能指向其他变量的“箭头”。 打个比方,如果有一排房间(每个房间就是一个变量),指针就是房间的门牌号,通过门牌号我们就能找到对应的房间,进而对房间里的东西进行操作。

指针的初始化

--一定要初始化指针

Int arr【5】【6】        对于二位数组的取列,表示方法

Int(*p)【6】

效果是一样的,前者运算速度>后者写法P[4]=*(p+4)

        Eg.  P[4][2]=*(*(p+4)+2)

指针越界访问

--当寻找位置超过数组的大小时,就会变成野指针

--此时*p取得a的大小10(接受了a得返回地址了),如果*p再有*p=20(赋予其他地址),就会变为野指针

指针的三个类别

数组指针

1.概念

数组指针确实是一种指针,它指向的是数组的第一个元素

2.对于数组的指针引用的写法

Int arr[10]={0};

Int *p=arr(&arr[]);

*p=20;

指针数组

1.概念

指针数组是指一个数组,其元素是指针

2.写法

eg. int *a[10];

      Char*arr[ ]={“ab,cd,ef”};

              [ ]的优先级别>*,所以是先有3个数据,再说明它们都是指针类型

数组指针和指针数组的两者比较

1.共同点

后者是什么就是什么,比如指针数组==指向数组,数组指针==指向指针(指针==首元素)==指向首元素。       

2.写法区别

指针数组:只有*没有挎号,数组指针:有

函数指针

表达方式+调用

Pf是例子,对应add,sum=2+3=5,调用可以加*(),也可以不加

  1.  int (*pc)(int,int);
  2.  int c;                     int a=10;int b=12;
  3.  c=(*pc)(a,b);    3步骤就是指针函数的使用方法  

如何避免野指针

  1. 如果不知道指针要初始化为什么,那就初始化为NULL(代表为0)
  2. 注意NULL后不能找0的地址(0的地址不能被访问)
  3. 要使用初始化为0的指针,那么用if(指针!=0)来判断使用
  4. Int a=10了之和已经被使用的地址了,再返回它就没有任何意义了(避免野指针地址的第4点)

意思是将arr内都改为1,

P++和p+i效果都是一样的+1跳过数组位置。

跳过在二维数组的应用

Eg:

1.i=0,j=1,i<5,j<6开始循环的二维数组:p+i可表示【i】

整体就可以变成*(【i】+j),

即【i】+【j】

*(*(p+i)+j)

相当于二维数组的累加/跳过某个位置

int sum_aaray(int b[][4])

{  

    int i,j,s=0;

    for(i=0;i<M;i++)

        for(j=0;j<N;j++)

            s=s+*(*(b+i)+j);

    return s;

}

2.int(*p)【6】表示用p指针记录下总6行的信息

  1. 指针-指针=指针之间的绝对值的个数
  2. 相减的需要是同数组

计算元素个数

Star接收的是str的第一个a的地址,因为str开始位置是a,然后才让str进行后移的

二级指针

表达方式:**变量

指针优化

数组和指针下标都是从0开始

字符数组和字符指针处理字符串的区别

1.用法

字符数组+指针(指针数组)                                        字符指针

Char arr[10];                                                                         char*str;

Char*str=arr;                                                                 str=”hello”;

Scanf(“%s”,str);

或者        单数组

Char str[10];

Scanf(“%s”,str);

2.修改地址方面

字符数组只能被引用,而不能被修改;字符指针可以反复修改

数组中数据的使用

Temp[m],不管是temp[j],temp[i]都可以使用到temp里面的数据,[?]方框里面是什么都只是用来指向数组的第几个数据

 数组指向

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值