要做一个只记得快乐和知识点的girl!
目录:
- 指针是什么
- 指针和指针类型
- 指针运算
- 指针和数组
- 二级指针
- 指针数组
1.指针是什么?
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电
脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将
地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
指针:指针是个变量,存放内存单元的地址。
#include <stdio.h>
int main()
{
int a=10;///在内存中开辟一块空间
int *p=&a;//这里我们对变量a,取出它的地址,可以使用&操作符
//将a的地址存放在p变量中,p就是一个指针变量
return 0;
}
总结:指针是用来存放地址的变量,存放在指针中的值都被当成地址处理。
- 在32位的机器上,地址是32个0或者1组成二进制序列,那地址就要用4个字节的空间来存储,所以一个指针变量的大小就应该是4个字节。
- 如果在64位机器上,如果有64根地址线,那一个指针变量的大小是8个字节才能存放一个地址。
- 指针是用来存放地址的,地址是唯一标示一块地址空间。
- 指针的大小在32位平台是4个字节,在64位平台上是8个字节。
2.指针和指针类型
指针的定义方式是:type + *。其实:char* 类型的指针是为了存放 char 类型变量的地址。short*类型、int*类型也一样。
总结:指针的类型决定了指针向前或者向后走一步有多大(距离)。
指针的解引用:
#include <stdio.h>
int main()
{
int n = 0x11223344;
char *pc = (char *)&n;
char *pi = &n;
*pc = 0x55;
*pi = 0;
return 0;
}
总结:char*的指针解引用只能访问1个字节,而int*的指针解引用就能访问4个字节。
3.指针的关系运算
标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个
元素之前的那个内存位置的指针进行比较。
4.指针和数组
#include <stdio.h>
int main(){
int arr[] = { 1, 2, 3, 4, 5, 6 };
printf(" arr= %p\n", arr);//取整个数组
printf("&arr[0]= %p\n", &arr[0]);//取数组里面的首元素
system("pause");
return 0;
}
运行结果:
总结:以上结果可见数组名和数组首元素的地址是一样。数组名表示的是数组首元素的地址。
int arr[]={1,2,3,4,5,6,7,8,9,0};
int *p=arr; //p存放的是数组首元素的地址
5.二级指针
二级指针的运算:
1.*ppa通过对ppa中的地址进行解引用,这样就找到的是pa,*ppa其实访问的是pa.
int b = 20;
*ppa = &b;//等价于pa = &b;
2.**ppa先通过*ppa找到pa然后对pa进行解引用操作:*pa就找的是a.
**ppa = 30;
//等价于*pa = 30;
//等价于a = 30;
6.指针数组
当然我们要知道:指针数组是指针还是数组?---->答案:是数组,是存放指针的数组。
以上arr3是一个数组,有5个元素,每个元素是一个整形指针。
~bye~