指针基础||一篇文章带你看懂指针

1. 指针是什么

  • 指针是个类型!,数据类型
  • 类型是干嘛用的,标注数据长度,做语法提示的。
#include <stdio.h>
int main() {
   
    char a = 1;
    char *b = &a;
    *b = 9999;
    printf("%d\n", *b);
    /*char是-127--127,指针也是数据类型,也会标注长度,大类型转小类型会截取*/
}

2.指针的值

指针的值有三种,句柄,地址,空指针

空指针

char * b = NULL;

空指针就是占位

地址

#include <stdio.h>
int main() {
   
    char a = 1;
    char *b = &a;
}

指针的值是一个地址,地址就是房间号,大小是八个字节

#include <stdio.h>
int main() {
   
    char a = 1;
    char *b = &a;
    printf("%d", sizeof(&a));//值是8
}

这个大小,和操作系统有关,32位系统是4字节,64位系统是8字节。

32位操作系统最大内存是4g,大概,32位系统,指针大小是4字节,也就是个int大小,四字节是32位,指针是存地址用的,也就是说这个地址长度是32位,也就是能存的东西是32^2,也就是4294967296 这个数/8,就是536870912 /1024大概事是54288,这是kb,算下来内存4gb左右。

  • 为什么32位的系统指针是四字节, 64位系统的指针是八字节?

    因为32位字长的系统的虚拟地址空间是2^32 - 1为了表示所有的地址,所以指针的大小必须大于等于2^32 - 1, 所以就是4字节(32位)

    64位系统同理

指针就是个数字,八字节,说他是地址,只不过里面存的是数字,大一点而已。

  • long long 也是八字节,指针和long long 有啥区别

    那就是不同类型,对运算符计算结果不一样,

#include <stdio.h>
int main() {
   
    int a = 1;
    int *p = &a;
    long long lp = (long long)p;
    printf("p = %lld\n", (long long)p);
    printf("lp = %lld\n", lp);
}//一个指针一个long long
#include <stdio.h>
int main() {
   
    int a = 1;
    int *p = &a;
    long long lp = (long long)p;
    printf("p = %lld\n", (long long)p);
    printf("lp = %lld\n", lp);
    p++;
    lp++;
    printf("new_p = %lld\n", (long long)p);
    printf("new_lp = %lld\n", lp);
    return 0;
}

int型指针,p+1其实是加4

long long类型指针p+1就是+8

加号运算符就是n+m *sizeof(type)

n是原始数字,m是加数,type是指针的类型

比如指针类型是int ,p+2就是p+8

概括:指针也是普通的数字,指针运算符结果和整形不同

*运算符

  • *星号是指针声明的符号

    用int*类型保存了a的地址

    星号出现在等号左边和类型声明结合的话,就是声明的,直接*,就是解引用

    #include <stdio.h>
    int main() {
         
        int a = 1;
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值