C语言学习笔记 lesson15&16 函数2指针的偏移

指针的偏移


int main()

{

int num = 100;

int *pnum = #          

printf("%p\n", pnum);         00E2FBB4

printf("%d\n", *pnum);     取值时,根据pnum里存储的值来读取当前指定位置;找到指定位置后,根据指针类型,去读取对应数据的长度。做存储时,先找到   pnum的地址,取出pnum中的值,解引用,根据当前记录的长度,往里面写入值。

pnum++;                              增加的是指针的长度

printf("%p\n", pnum);        00E2FBB8   int 型长度增加4


char *pchar = #     

 printf("%p\n", pchar);       00E2FBB4   指向num的地址

printf("%d\n", *pchar);

printf("%c\n", *pchar);

pchar++;printf("%p\n", pchar);       00E2FBB5   char型长度增加1

double *pdouble = #

printf("%p\n", pnum);

00E2FBB4printf("%d\n", *pdouble);

printf("%c\n", *pdouble);

printf("%lf\n", *pdouble);     数据会出错,不能以%lf来解析

pdouble++;

printf("%p\n", pdouble);       00E2FBBC double型长度增加8

return 0 ;
}

注: 使用指针时,不能使用与数据类型不同的指针。以上例子只用于了访问指针内存储的值。如果进行修改,则会发生错误使用char型指向int型数据,char型的指针大小比int型的小,会修改实际数据的值。而如果使用double型指向int 型的数据,double型指针大小比int型的大,会改写实际数据之外的值。


数组也是指针的一种,数组将类型相同的数据集中在一起,数组名指向集合的首地址,通过指针偏移的方式访问数组。操作数组使用的下标,其实就是使用指针名代表的地址加上对应的下标,通过指针偏移的方式指向待访问的数据地址。来读取和改写值。


数组存储字符串:

字符串是由\0表示结尾

 char string[9]="123456789";

 printf("%s",string);   在字符串后会打印出一些乱码,程序运行到需要取字符串的时候,会从当前指定的指针地址后开始读取,一直遇到"\0"才会停止读取,没有会导致乱码。


char *pstring = "123456789";  字符串辨别长度根据"\0"来判断是否是结尾;


 char string[10]="123456789"; 将空间分配在栈中,可读可写

 char *pstring = "123456789";  编译器将字符串放在常量区 

  *(pstring+1='A' ;  会发生错误 


你可能感兴趣的:(C语言学习笔记)