指针的定义
C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量
指针的优点
在C语言中,指针的使用非常广泛,因为使用指针往往可以生成更高效、更紧凑的代码。总的来说有以下三点:
-
指针的使用使得不同区域的代码可以轻易的共享内存数据,这样可以使程序更为快速高效;
-
C语言中一些复杂的数据结构往往需要使用指针来构建,如链表、二叉树等;
-
C语言是传值调用,而有些操作传值调用是无法完成的,如通过被调函数修改调用函数的对象,但是这种操作可以由指针来完成,而且并不违背传值调用。
指针变量指向类型的作用:
1. 决定了指针变量所取空间内容的宽度
int value = 9000;
int *p3 = &value;
char *p4 = &value;
NSLog(@"sizeof(*p3):%d",sizeof(*p3));
NSLog(@"sizeof(*p4):%d",sizeof(*p4));
2020-05-17 11:26:58.034220+0800 MvvmDemo[12382:532778] sizeof(*p3):4
2020-05-17 11:26:58.034324+0800 MvvmDemo[12382:532778] sizeof(*p4):1
2. 决定了指针变量+1跳过的单位跨度
int value = 9000;
int *p3 = &value;
char *p4 = &value;
NSLog(@"p3:%p",p3);
NSLog(@"p4:%p",p4);
p3 ++;
p4 ++;
NSLog(@"p3+1:%p",p3);
NSLog(@"p4+1:%p",p4);
2020-05-17 11:30:07.176755+0800 MvvmDemo[12428:535933] p3:0x7ffee670508c
2020-05-17 11:30:07.176905+0800 MvvmDemo[12428:535933] p4:0x7ffee670508c
2020-05-17 11:30:07.177011+0800 MvvmDemo[12428:535933] p3+1:0x7ffee6705090
2020-05-17 11:30:07.177103+0800 MvvmDemo[12428:535933] p4+1:0x7ffee670508d
数据在内存里存储
数据在内存里是倒着存储的,通过一下demo测试
int aa = 0x01020304;
int *p = &aa;
NSLog(@"*p--value:0x%x",*p);
short *p1 = &aa;
NSLog(@"*p--value:0x%x",*p1);
char *p2 = &aa;
NSLog(@"*p--value:0x%x",*p2);
2020-05-17 11:19:27.054654+0800 MvvmDemo[12300:527063] *p--value:0x1020304
2020-05-17 11:19:27.054741+0800 MvvmDemo[12300:527063] *p--value:0x304
2020-05-17 11:19:27.054853+0800 MvvmDemo[12300:527063] *p--value:0x4
记录一下,以便日后查看。
网友评论