- 总括
代码调试非常重要呀
一个程序员30-40%写代码
剩下的时间调试代码
能看出你的问题
写三子琪
绩效分有多少bug
自己写bug,自己找bug,自己改代码
- 指针是什么
讲到内存单元的编号,地址单元的地址,就是指针
内存单元的编号 == 内存单元的地址==指针
为了管理内存,进行改革为一个一个内存单元,一个个字节
为了管理内存单元,对单元进行编号
一个地址能找到一个内存单元,即指向
内存单元编号怎么产生:
32位机器通电 ---32个01组成的二进制序列
0000000000000000000000000000000000000000
.....
1111111111111111111111111111111111111111
int a =10;
a一定在内存中创建空间,之后就有自己的地址
10占四个字节空间
每个字节有一个内存单元编号
理论上10应该有四个字节
但是呢我们用四个地址去访问她比较麻烦
所以当我们在这取地址a时;拿到的是a的四个字节中第一个字节的地址
现在你要把她存起来;pa就是一个指针变量
指针变量的类型是int
int *就可以了 这颗*说明了pa是指针变量
int说明了pa指向的对象a是整形类型
*pa可以找到a
*pa = 20;
编号>>地址>>指针
这里地址存起来要一个变量,这个变量是用来存放地址的
也是用来存放指针的
存放地址的就是指针
所以我们把这个存放地址的变量称为指针变量
- 总结
指针就是变量,用来存放地址的变量(存放在指针中的值都被当成地址处理)
那么有几个问题:一个小的单元到底是多大? 一个字节
总结:内存被划分为一个一个小的内存单元,一个内存单元是一个字节,然后每个内存单元要进行内存编号,编号要存起来,就印出来指针变量的问题
- 总结
- 指针和指针变量
- 一
int *pa;
cha *pc;
float *pf;
看看指针变量所占空间大小,发现大小都一样
指针变量不论什么类型都是大小4
但指针类型是有意义的
我们创造一种通用类型指针?no
int a = 0x11223344;
十六进制的数字组成都是0123456789abcdf这些选项
最高位f需要几个二级制数表示呢
f是15,要表示成二进制,四个二级制位
所以我们说四个二进制位最多可以表示一个十六进制的数字
所以我们在这说:
int a = 0x11223344
就是0x11111111111111111111111111111111
11占一个字节
两个四二进制位,就是八个二进制位,就是一个字节
这四个字节把a填充满,是个整形
取地址a&
int *pa =&a;
pa存的是a的地址
*pa=0;
通过pa找到a
我们换一种写法:char *pc = &a;
pc指针也是四个字节
*pc = 0;
汇报警告
地址放得下
我们发现44变成00了
只改变了一个字节
可以下结论了
int*pa =&a;时
*pa解引用的时候访问四个字节
如果我们换成一个char* pc的指针
我解引用的时候只访问了一个字节
类型变化,访问权限发生字节
指针类型有意义
如果我们是整形指针,解引用的时候,解引用一次可以访问四个字节
字符指针,只能访问一个字节
说明了指针类型决定了指针解引用的权限有多大
double可以访问八个字节
char*指针访问一个字节
int arr [10] = {0};
int *p = arr;
arr是数组首元素的地址,所以放到int * p里去
放pc也行
整形的地址 虽然类型不符,但也可以放
char * pc = arr;
其实不管怎么的指针,都可以放地址
当我们打印的时候:
打印测试
pc+1
发现p和pc一样
但p+1和pc+1不一样
这个地方现在如果是个整形指针跳过一个整形跳过四加了四
+1 +4 是因为p和pc的类型不同
说明了指针类型决定了指针走一步走多远
double型指针加一 8个字节
加一可以减一也可以
指针加减整数有多大距离
指针类型的意义讲完了
我们来应用一下
int arr [10] = {0};
现在我们把arr交给整形指针
int *p = arr ;
循环十次
arr数组交给指针变量p
p指向这里
p +1 ;p指向这个位置
p+i其实就是下标为i的地址
*(p+i) = 1;
相对于每个地址都改成1
走一步跳过一个整形
整形指针的维护方式
整形指针加一就是跳过一个整形
解引用就是访问一个整形
加的是一个字节,跳过的是一个字节
告诉我们未来每个指针都有意义
- 一
指针初阶一
最新推荐文章于 2024-09-13 10:21:40 发布