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