文章目录
前言
指针是C语言中一个非常重要的概念,也是C语言的特色之一。通过指针可以处理复杂的数据、对计算机的内存分配进行控制,以及在函数调用中使用指针可以返回多个值。下面将对指针从浅到深进行学习,掌握其基本的使用方式,以及实现熟练地运用指针简化处理编程问题。
一、认识指针
- 内存单元:内存空间切割成小分,大小:1byte(8 bit = 1 byte)。
- 1bit——相当于0或1
- char型1字节 int型2字节 float型4字节 double型8字节
- 地址:内存单元的编号(”&“地址运算符)。
- 指针:内存中最小单元的编号,也就是地址。本质上:地址=指针。
- 指针变量:存放内存地址的变量(常说的指针其实指的是 指针变量 ),指针变量所取的地址是第一个字节的地址。(“变量”就是可以被赋予值的东西)
int main() { int a = 1;//在一个内存单元所存储的值 int *p = &a;//将a变量的地址编号赋予p,p即为指针变量 printf("%d",a);//直接访问 printf("%d",*p);//间接访问,先访问地址,在通过地址访问值 return 0; }
int main() { int a =100;//赋予a变量一个值 int *p = a;//取a变量的地址 *P = 0;//将a变量地址的值改为0 return 0; }
如图所示:
5.电脑能编址的空间:
- 总结:
- 1.指针是用来存放地址的,地址是唯一表示一块地址空间的;
- 2.指针在32位平台是4字节,在64位是8字节
- 关于32位和64位系统解释参考:Windows 32 位和 64 位的区别:你需要知道的一切_win32 x64-CSDN博客
二、指针类型的应用
1.字节访问
指针类型决定了指针在解引用的时候访问几个字节,因此可以利用各指针类型所占字节大小的不同之处,实现对内存单元进行部分修改。
int mian ()
{
int a =11223344;//int型占4个字节-->44 33 22 11
int *pa = &a;//取a地址
*pa = 0;//四个内存单元均变成0-->00 00 00 00
//char* pc = (char*)&a;
//强制类型转换
//*pc = 0;
//此处与int不同的是char只占一个字节,所以只有内存单元最上方的数值变为0-->00 33 22 11
return 0;
}
2.基本运算
指针变量的运算方式由指针变量的类型决定
int main ()
{
int a =110;
int *pa = &a;//int型
char *pc =(char*)&a;//char型
printf("pa = %p\n",pa);
printf("pa+1 = %p\n",pa+1);//地址+4字节,006FF9F8-->006FF9FC
printf("pc = %p\n",pc);
printf("pc+1 = %p\n",pc+1);//地址+1字节,006FF9F8-->006FF9F9
return 0;
}
总结
本文对指针的概念、赋值、运算进行简单的介绍,初步了解指针的内部结构,以及学习了如何通过运用指针类型的差异对数值进行修改。