留学中介网站建设方案,设计企业品牌商标,建立微信小程序,网站发布服务托管器生活中我们把门牌号也叫地址#xff0c;在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起 了新的名字叫#xff1a;指针。 所以我们可以理解为#xff1a;内存单元的编号地址指针
1、指针变量
我们知道的是#xff1a;数组名是数组首元素的地址。也就是说在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起 了新的名字叫指针。 所以我们可以理解为内存单元的编号地址指针
1、指针变量
我们知道的是数组名是数组首元素的地址。也就是说如果有一个arr数组那么
arr arr[0];
两者都是常量在程序的运行过程中不会改变。但是可以把它们赋值给指针变量然后可以修改指针变量的值。
那如何创建指针变量呢
int* p;
像这种就创建了一个指针变量p 它的类型是int。指针变量也是一种变量这种变量就是用来存放地址的存放在指针变量的值都会被理解为地址。
#include stdio.h
int main()
{int a 10;int* p a;return 0;
}
注意存放什么类型的数据在指针变量的中那么指针变量就是该类型。
int a 10;
char* p a;
像这种编译器就会产生从 int*到char*的类型不兼容的错误我们应该避免掉。
指针变量的大小
32位机器假设有32根地址总线每根地址线出来的电信号转换成数字信号后是1或者0那我们把32根地址线产生的2进制序列当做一个地址那么一个地址就是32个bit位需要4个字节才能存储。 如果指针变量是用来存放地址的那么指针变的大小就得是4个字节的空间才可以。 同理64位机器假设有64根地址线一个地址就是64个二进制位组成的二进制序列存储起来就需要 8个字节的空间指针变的大小就是8个字节。(x64环境下) 结论
32位平台下地址是32个bit位指针变量大小是4个字节64位平台下地址是64个bit位指针变量大小是8个字节注意指针变量的大小和类型是无关的只要指针类型的变量在相同的平台下大小都是相同的。
指针的解引用
用 * 符对指针进行解引用 指针的类型决定了对指针解引用的时候有多大的权限一次能操作几个字节。
比如char*类型的指针解引用就只能访问一个字节而int*类型的指针解引用就能访问4个字节。
2、指针运算
指针-整数
先来看一段代码观察地址的变化
#include stdio.h
int main()
{int n 10;char *pc (char*)n;int *pi n;printf(%p\n, n);printf(%p\n, pc);printf(%p\n, pc1);printf(%p\n, pi);printf(%p\n, pi1);return 0;
}
代码的运行结果如下 我们可以看出char*类型的指针变量1跳过1个字节 int*类型的指针变量1跳过了4个字节。 指针的类型决定了指针向前或向后走一步有多大距离。 指针的值是它所指向对象的地址。地址的表示方式依赖与计算机