初阶指针知识点总结

今天分享一个自己总结的初阶指针知识点:

1.首先什么是指针

指针就是一个变量,用来存放地址的变量,利用他可以找到该地址位置的内存单元,他起一个指向作用,属于一个形象化的定义。

2.一级指针及定义

举例如下:

int a = 10;
int *p = &a;

可以看出指针的定义方式就是: 指针类型 + *
此时的p就是一个指针变量,他存放着a在内存中所处的地址。
指针和变量一样同样具有类型:int,char,float,short,long,double,不同类型的指针对应不同类型的变量的地址。
注:指针大小在32位平台是4个字节,在64位平台是八个字节!

3.指针的解引用

举例如下:

int a = 10;
int* p = &a;
*p = 20;
printf("%d\n",a);

a的运行结果为20,有人可能会有疑惑,a的值不是10么,怎么变成20?
原因是p存着a的地址,所以通过p可以找到a,a中本来存放的值是10,而就是*p这个关键的操作,影响了a的值,因为 *p 表示的是对指针p进行解引用,也就是获取p所存放的该地址位置上的值,*p = 20就解引用获取了a的值并把a的值改为了20,所以再输出a的值时,a的值就变为了20,这是对内存地址上的变量进行了修改是会改变原值的。
注:指针的类型决定了对指针解引用的时候有多大的权限(能操作几个字节)!

4.指针运算

(1)指针±整数
举例如下:

int a = 10;
int*p = &a;
printf("%p\n",p);
printf("%p\n",p+1);

运行结果:arr -> 007CFEB8 arr -> 007CFEBC ,可以看出两个指针的值相差了4刚好一个字节,所以指针±整数就是指针的值(存放的地址)±整数,而加减多少由所指向的变量类型决定。
(2)指针-指针
举例如下:

char* s = "abcde";
char* p = s;
while (*p!='\0')
{
	p++;
}
printf("%d\n",p-s);

运行结果:这个程序我想不难看明白,就是一个求字符串长度的方法,定义一个指针s所指向的字符串abcde,然后让p也指向s,然后while循环就是让p走到字符串的末尾,p-s其实就是计算他们之间有多少个元素。

重点: 在这里补充一个概念就是关于电脑的大小端字节序。
举例如下:

int num = 0x11223344;
char* p = (char*)#
printf("%x\n",*p);
printf("%x\n",*(p+1));

运行结果: 44 33
这种结果的话就是小端字节序,因为11223344来看44是低位,而p是低地址,p+1是高地址,低地址存放低位,高地址存放高位所以是小端字节序。
而如果是相反结果的话那就是大端字节序,低地址存放高位,一般来说大端字节序要遇到的更多一些,因为他也更符合我们的思想,把一个数拆分后,低地址存放高位,高地址存放低位。
所以这就是一个判断电脑大小端字节序的方法!

5.指针和数组名

数组名是什么?
举例如下:

int arr[10] = {1,2,3,4,5,6,7,8,9};
printf("%p\n",arr);
printf("%p\n",&arr[0]);

运行结果:arr和&arr[0]是同一个地址,由此可见数组名表示的就是数组首元素的地址。

6.指针和数组

前面也说了指针和数组名,以及指针±整数的运算,所以有了这两个前提就可以通过一个指针存放数组名,然后指针+ i(i为自己想访问的第几个元素)来访问自己指定想访问的元素,指针+i其实就是计算的是数组下标为i的元素的地址。

7.二级指针

指针也是变量,是变量在内存中就有地址,那指针变量的地址存放在哪里呢?答案当然是二级指针
举例如下:

int a = 10;
int*pa = &a;
int**ppa = &pa;

a的地址存放在pa中,pa的地址存放在ppa中,pa是一级指针,而ppa是二级指针。
当然解引用操作和一级指针一样。

8.指针数组

首先要搞清楚这是数组还是指针,需要看最后两个字是数组,所以这是一个数组。
比如 int* arr[3]
这个数组名为arr,里面有三个元素,每个元素又是一个整形指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值