【C语言】指针Ⅲ --- 指针变量初始化、赋值语句的方法、指针变量的大小、上述总结。

时间:2022-12-07 12:07:51

????write in front????   

????大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流????

????2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 星级博主~掘金⇿InfoQ~51CTO创作者[新人创作榜No.11]~周榜393﹣总榜1024⇿全网访问量40w+????

????本文由 謓泽 原创 发布在51CTOP 如需转载还请通知⚠

????个人主页-​謓泽51Ctop的博客​????

????欢迎各位→点赞???? + 收藏⭐️ + 留言????

????系列专栏-​謓泽51Ctop的分类_51CTO博客​????

✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本????

【C语言】指针Ⅲ --- 指针变量初始化、赋值语句的方法、指针变量的大小、上述总结。

 ????指针变量初始化 

指针变量初始化是非常重要的,很多初学指针的小伙伴们很容易就会把指针没有进行指针变量的初始化。

如下代码所示↓

#include<stdio.h>
int main(void)
{
int a = 10;
int *p = &a;
printf("*p = %d\n",p);
return 0;
}

【C语言】指针Ⅲ --- 指针变量初始化、赋值语句的方法、指针变量的大小、上述总结。

????注意→上述代码是错误的,在打印printf的时候,p并没有对其进行解引用操作(找不到p的数值) 此时p是找不到a的地址的,也可以说并没有指向&a。

如下代码所示↓

#include<stdio.h>
int main(void)
{
int a = 10;
int *p = &a;
printf("*p = %d\n",*p);
return 0;
}

【C语言】指针Ⅲ --- 指针变量初始化、赋值语句的方法、指针变量的大小、上述总结。

此时,对其中打印 printf 进行解引用操作找到 a 的地址。运行结果为:*p = 10 

????注意→在使用指针的时候,是必须要给指针变量进行初始化的,不然就会是野指针。关于野指针是什么这个在后面会说的。  


????赋值语句的方法

如下代码所示↓

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

【C语言】指针Ⅲ --- 指针变量初始化、赋值语句的方法、指针变量的大小、上述总结。

不允许把一个数赋予指针变量,故下面的赋值是错误的。

int * p;
p = 10;

【C语言】指针Ⅲ --- 指针变量初始化、赋值语句的方法、指针变量的大小、上述总结。

被赋值的指针变量前不能再加“*”说明符,如写为 *p=&a 也是错误的。

另外,指针变量和一般变量一样,存放在它们之中的值是可以改变的,也就是说可以改变它们的指向。


????指针变量的大小

如下代码所示

#include<stdio.h>
int main(void)
{
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(long *));
printf("%d\n", sizeof(long long*));
printf("%d\n", sizeof(float *));
printf("%d\n", sizeof(double *));
printf("%d\n", sizeof(short *));
return 0;
}

【C语言】指针Ⅲ --- 指针变量初始化、赋值语句的方法、指针变量的大小、上述总结。

运行结果????

④(全部)

从上述结果可以看出指针变量都是④个字节

为什么不同类型的变量的地址所占的字节数都是一样的呢

原因是:他们数据类型都是指针类型,切记(☆-v-)

????注意→这个是在32位的操作系统 = 4字节,64位的操作系统上 = 8字节


⚔ 上述总结

指针就是变量,用来存放地址的变量。(存放在指针当中的值都是会被当做是地址来处理)

还有下列②个问题如下↓

  1. 一个小的单元到底是多大(①个字节)
  2. 如何进行编址

经过仔细的计算,一个字节(⑧比特位)对应其一个地址是比较合适的(①字节等于①地址)

指针就是用来存储地址的,地址是唯一表示一块地址空间。

指针大小在32位的平台上是④个字节,在64位上的平台是⑧个字节。

在32位平台上产生的地址线就是由 32个0&1组成的地址线,在64位平台上产生的地址线就是由64个二进制0&1组成的地址线。