目录
目前不讲指针的复杂用法
一.指针的作用
可返回多个或不同类型的值,弥补数组与函数的缺陷。
在程序设计过程中,无论是存入数据还是取出数据都需要与内存单元打交道,计算机通过地址编码来表示内存单元。指针类型就是存放地址编码,处理计算机的地址数据的。
指针除了能够提高程序的效率,更重要的作用是能使一个函数访问另一个函数的局部变量,因此指针是两个函数进行数据交换必不可少的工具。
二.地址的概念和数据存放的原理
首先
需要我们知道计算机中内存会划分为一个个内存单元地址
在我们写程序的时候
int main()
{
int a = 10;
return 0;
}
其中变量a会向内存申请4个byte大小的空间去存放a(也就是4个内存单元格)
a地址的编号
#include<stdio.h> int main() { int a = 10; printf("%p\n",&a);//将其a的地址打印出来0x00eff858 return 0; }
为什么地址的样子类似于0x00EFF858这样
例如int a=10;a向内存申请4个byte
0000 0000 0000 0000 0000 0000 0000 1010
转化为16进制就是0x0000000a
指针的表达
#include<stdio.h>
int main()
{
char ah = 10;
char*ah = &ah;//char 说明ah指向的对象是char类型 *说明p是指针变量
return 0;
}
*p解引用操作符
#include<stdio.h>
int main()
{
char ah = 10;
char*p = &ah;//char 说明ah指向的对象是char类型 *说明p是指针变量
*p=20//解引用操作符,意思是通过p存放的地址,找到p所指代的对象。所以*p就是p指代的对象。
printf("%d\n",a);
//最后打印出的数字为20
return 0;
}
三.指针的变量大小
可用操作符sizeof来计算(单位为byte)
#include<stdio.h>
int main()
{
printf("%d\n",sizeof(char*));
printf("%d\n",sizeof(int*));//
printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double*));
printf("%d\n",sizeof(short*));
return 0;
}
在C/C++中,指针变量的大小是固定的,它的大小与操作系统和编译器有关。具体来说,指针变量的大小通常为4字节或8字节,取决于操作系统和编译器的位数。
在32位的操作系统上,指针变量的大小通常为4字节;在64位的操作系统上,指针变量的大小通常为8字节。
这是因为32位操作系统的地址总线宽度为32位,最多可以寻址2 ^ 32(4 个 8bit 即 4B)个内存单元,因此一个指针变量需要4字节来存储地址。而64位操作系统的地址总线宽度为64位,最多可以寻址2 ^ 64(8 个 8bit 即 8B)个内存单元,因此一个指针变量需要8字节来存储地址。
需要注意的是,指针变量的大小只与地址空间有关,而与指向的对象类型无关。无论指针变量指向何种类型的对象,它的大小都是固定的。
参考 32,64最大支持的内存寻址空间