- 前言
- 1.计算机的内存
- 2.指针变量
- 2.1定义指针变量
- 2.2 指针变量的赋值
- 2.3 指针变量的引用
- 2.4总结
- 3.指针的自增,自减运算(了解)
指针是C语言的一个特点,也是C语言的精华与难点
今天我们就来一探指针的奥秘。
以下是本篇文章正文内容
1.计算机的内存熟悉计算机的人,应该都听过计算机的概念。
从硬件上看,内存就是一个物理模型
从功能上看,内存是一个数据仓库,程序执行都要被加载到内存中,才能被中央处理器执行。
我们可以将内存看成一个个连续的小格子的组合,为了正确的访问这些格子,我们就将这些格子进行编号,这些编号就是地址值。
那如何去描述这些小格子的大小呢?
我们将计算机最小存储单元设为一个位(bit),一个位中只能存储1或0,由8个位组成一个字节。
所有的的变量都保存在计算机内存中,既然保存在内存中那必然对应一个地址值,和占用一定的空间。而且变量类型不同占用的内存空间也不同。
int类型的变量占用四个字节(byte)
char类型的变量占用一个字节(byte)
double 占8字节(byte)
借用小甲鱼老师的一句名言:
no picture say ge ji ba
所以:
我们看到上面一个小格子就对应4个字节:
我们也同时发现前面有一串很长的数字0x6124462
这一串数字就对应这地址值,我们是如何知道变量的地址值呢?
&变量名就是该变量在内存中对应的地址值
代码实现:
#include2.指针变量int main(){ int a=1; printf("&a=%d",&a);//输出地址值 return 0; }
什么是指针变量:
指针首先是一个变量,既然是变量,内存也要为它开辟一段空间,这个空间对应着一个地址值。数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。
上图
2.2 指针变量的赋值指向变量的类型 *指针变量
其中 *表示该变量是一个指针变量
先定义一个变量例如
int a;
然后将变量的地址值赋值个指针变量
int *p=&a;
[Warning] initialization makes pointer from integer without a cast
不要直接把变量赋值给指针int *p=a;
代码演示:
#include2.3 指针变量的引用int main(){ int a=1; int *p=&a; printf("&a=%dn",&a);//输出a的地址值 printf("p=%dn",p);//输出指针p存的地址值 printf("&p=%dn",&p);//输出指针p的地址值 return 0; }
我们可以通过指针来访问变量的值,这个就叫指针变量的访问,
引用指针变量的形式为“*指针变量”其含义就是引用指针变量所指向的值,
就是通过变量的地址值访问变量值
代码演示:
#include2.4总结int main(){ int a=1; int *p=&a; printf("*p=%d",*p); return 0; }
3.指针的自增,自减运算(了解)int a=1;
int *p=&a;
int *p中的 *表示的就是为了说明这个变量是指针变量
p中存的是a地址值
printf("%d",*p);中的 *p 指的是这个指针p指向变量a的值
&变量名—>表示该变量的地址值
指针的自增自减运算并不是普通变量的自增自减运算,而是按照它所指向数据类型的直接长度进行加减
代码演示
#includeint main(){ int a=1; int *p=&a; printf("p=%dn",p);//6487572 p++; printf("p=%dn",p);//6487576 return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)