指针(初阶)和指针数组

1 指针(初阶)
概念: 指针是一个对象,它存着一个地址,在这个地址中存该指针的值
eg: 门牌号 001 小吕家
32位操作系统 32条地址总线,可以查找 2^32的寻址范围
2^32/1024/1024=4G 指针占4字节(32位操作系统4字节,64位下8字节)

          不同类型的指针可以接收不同类型的地址
          char* pc=&ch;
          int*pa   -=&int
          void* (1)可以接受不同类型的指针,但不能进行解引用
                    (2)不能进行指针运算(因为它是无类型的,没办法确定返回的长度)
         不同 *类型加整数后的地址取决于原来的类型;
         eg   short * p=&sh
    p+2    地址100
    p+2的地址为104

<1>野指针(没有指向) 
   eg  int* p
  他没有地址,运行时会报错;    
  非要初始化时 初始化为 (空指针) int* p=NULL;
  (NULL相当于0地址,该地址拒绝访问,被保护),所以不能解引用,不然会崩溃;

 <2>(什么类型指针解引用之后对应相应字节)    ———>大小端(低地址对应低重权(低数据)——>小端,相反大端)
                                                                                                                一般手机是小端,电脑是大端
      如何判断操作系统大小端?

int n =0x12345678;
char* pc=(char *)&n
printf("%x",*pc);(解引用1个字节,一个字节可以存两个位,);
结果为
如果输出是78就是小端,输出12就是大端;

  <3>指针和数组名
1: 数组名代表数组首元素地址
2;   sizeof(数组名)代表整个数组字节大小
3: P[i]=*(p+i)即数组的 [ ] 跟解引用等价
4:指针减指针所得他们的距离(只有在两个指针同时作用在同一块内存时才有意义)

eg;int a[]={1,2,3,4,5,6,7,8,9,0}
int* p=&a[4];
int* p1=&a[2];
p-p1=2;(得距离)

             *vp++ = 0;  等价于 *vp=0; vp++;
    <4> 允许指针跟数组最末元素得后一个比较,但不允许跟首元素前一个比较
 eg:  int a[3];
        int *p;
        for(p=0;*p<a[4],p++)允许


     <5>指针数组 
         指针数组就是数组,只不过内存放的为地址
         int a[3]={0}      类比   int* b[3]={"hello","world","C"}  
                                           int* c={arr1,arr2,arr3}(其中arr1,arr2,arr3均为数组)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值