指针(编程语言中的一个对象)
1.理解指针定义
指针是一种以符号形式使用数据存储地址的方法,指针数据的本质就是一个数据地址,系统可以根据该地址快速检索到该地址所存储的数据。或者理解成指针是一个数据类型,用来表示地址。跟int一样,int用来表示整型。 指针类型的变量是一个普通的变量,也就是指针变量,既然是变量就会有自己的类型,也会有自己的值。只不过指针变量的值跟一般变量不太一样,指针变量的值是一个地址。
2.取地址&
&取地址运算符
#include<stdio.h>
int main()
{ //格式化输入函数 scanf,在从键盘缓存接收数据时,需要把数据存入内存地址中。
scanf("%d",&a);//需要对变量进行取地址操作,得到真正的内存空间。
printf("你输入的数是:%d",a);
}
3.*地址指向内存空间的操作
*指针的间接运算符
*的作用是对地址指向的内存空间进行操作(取值、存值);
#include<stdio.h>
int main(){
*(&a)=100;//&a为取地址,*内存地址 就代表:地址空间 和a=100所表达意思相同
printf("a=%d\n",a);
printf("*(&a)=%d\n",*(&a));//*(&a)表示从地址空间取值(去打印)
*(&a)+=5;//对地址空间 进行运算
printf("a=%d\n",a);
}
这个代码中有一行代码是*(&a)=100;我后边给它的注释是和a=100所表达的意思相同,那为什么要多此一举?其目的是为了更容易的理解指针,这也就有了一个新的符号&,即取地址运算符
&a表示取到了a的内存地址,*(&a)表示通过*进入了&所取到的a的地址,得到了内存地址里的值,即100
内存地址-------怎么取?-------用&
指针变量--------怎么声明?-------用*
4.指针变量
现有类型 * 指针变量名
例如,int *p;声明了一个指针,存储地址指向的数据为的整型。
#include<stdio.h>
int main()
{
int a=10;
int *p=&a;//定义指针变量p,p指向a的地址
printf("%p",p);//打印地址编号
}
5.指针的移动
#include <stdio.h>
int main()
{
int *p=1;
double *pd=2;
long long *pll=3;
char *pc=4;
printf("现地址:%d 下一个地址:%d\n", p, p+1);
printf("现地址:%d 下一个地址:%d\n", pd, pd+1);
printf("现地址:%d 下一个地址:%d\n", pll, pll+1);
printf("现地址:%d 下一个地址:%d\n", pc, pc+1);
}
指针的加减操作本质上是将所指向的地址向前或者向后移动对应类型的字节宽度。
6.指针变量的字节数
#include <stdio.h>
int main()
{
int *p;
double *pd;
long long *pll;
char *pc;
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(pd));
printf("%d\n", sizeof(pll));
printf("%d\n", sizeof(pc));
return 0;
}
需要注意的是:无论什么类型的指针变量,所占字节长度是固定的,因为指针变量保留的是内存地址的编号,它只能随着32位系统或64位系统而不同。32位就是用4个字节空间保留地址编号,64位就用8个字节空间保留地址编号