c语言指针详细讲解
C语言中指针是一种数据类型,指针是存放数据的内存单元地址。
计算机系统的内存拥有大量的存储单元,每个存储单元的大小为1字节,为了便于管理,必须为每个存储单元编号,该编号就是存储单元的“地址”,每个存储单元拥有一个唯一的地址。
指针变量除了可以存放变量的地址外,还可以存放其他数据的地址,例如可以存放数组和函数的地址。
什么是指针的指针
指针的指针是指一个指针变量存储的是另一个指针变量的地址,也就是说,它是一个指向指针变量的指针。通过使用指针的指针,可以实现多级间接寻址,即通过多重指针来访问指向指针的指针所指向的内存区域。
这种技术在一些高级编程语言中非常常见,特别是在操作系统和网络编程中,经常需要使用指针的指针来处理复杂的数据结构和网络协议。因此,了解指针的指针对于程序员来说是非常重要的。
指针的指针是指一个指针变量的值是另一个指针变量的地址,即这个指针变量指向的是另一个指针变量的地址。也就是说,指针的指针可以用来间接访问一个指针变量所指向的内存空间,进而修改这个指针变量所指向的值。在C语言中,指针的指针常常被用来动态地分配内存、传递二维数组等。指针的指针是指针的高级应用,需要深入理解指针的基础知识和内存模型。
C语言指针到底有什么用
所有变量值保存在内存中,而每个内存都有一个地址,所谓地址就是一个整数编号,如同门牌号码用于定位(专业术语叫寻址),一个地址对应一个字节(8bit)的内存单元。
如今的编译器,一个整数int类型的值占用32位bit,也就是4字节,编译器将第一个字节的编号定义为该整数的地址,由于保存地址的变量就像一个箭头指向某地址,而称为指针变量。
int a =10; //定义一个整数变量a,对其赋值10
int *p =&a;//定义一个指针变量p,对其赋值a的内存地址,&符号意思为引用跟随其后的变量地址。
cont <<a<<end; //输出 a的值:10
cont << p << end ;// 输出p的值:XXXXX 其实为a的地址,该地址由编译器和运行时确定。
cont << *p <<end; //输出p指向的地址中的值:10,也就是a的值,*星号放在变量前面意思就是取该变量中的地址所指内存中的值。
读取过程为:p的值(a的地址)->寻址->取值
由于指针是一个变量的首个字节的地址,所以要告诉编译器被指地址包含连续多少个字节,因此指针也有类型。比如上面例子中声明了p指针是个整数指针,这样编译器知道p指向一个4字节的内存块。
你可以将指针变量看做一般的整数变量来理解,用来保存一个整数(地址是个整数),只是,该整数代表着某地址,在这里是a的地址。
在C/C++中很灵活,但是也很危险,也很难学,如果指针指向错误的地址会引起程序崩溃,因此在C#中已经被微软封装了,但内部还是有指针的。
如果有必要,C#中也可以使用指针,使用非安全代码,在项目生成选项卡中勾选“允许非安全代码”,然后就可以使用指针了,不过不建议这么做。
unsafe
{
int a = 10;
int* p=&a;
}
还没有评论,来说两句吧...