1.1指针:一种特殊的变量。
指针保存的值是内存地址,那么我们就用指针来通过内存地址访问程序元素。
2.1访问变量的方式有俩种:
1.通过变量名直接访问 。
2.通过内存地址访问 。
内存地址:本质:无符号整数(unsigned int )(32位系统可访问的最大字节为4 , 64位系统可访问的最大字节为8 )
通过内存地址+长度确定一个变量中保存的值。(先访问低字节,再访问高字节)
3.1书写命名规则:( 数据类型 *指针名 ) type * Pointer;
“ * ” 的意义:指针,访问 变量的地址 的符号。
“ & ” 的意义:地址运算符,取 变量的地址 的符号。
&和*优先级一致,所以m = *(&i)与m = *&i一致;
%p :格式控制符“%p”中的p是pointer(指针)的缩写。printf函数族中对于%p一
般以十六进制整数方式输出指针的值,附加前缀0x。
int* p=a;的意思:将a的值 赋给 p指针指向的地址;
int p=&a;的意思是:将a的地址赋给指针p;
函数只能返回一个值,但是通过指针参数可以实现交换变量的值。
4.1实践编程了解指针
int *pt = NULL; //定义一个名为pt的空指针,pt只是一个指针,其地址和值随指向而改变(重点)
int p = 0;
int temp = 0;
int *pt = NULL; //定义一个名为pt的空指针,pt只是一个指针,其地址和值随指向而改变
int x = 5; int y = 6;
printf("打印出来为pt的地址:%p\n",pt);
pt = &x; //现在指针pt指向x
printf("打印出来为x的地址:%d\n",pt);
printf("打印出来为x的值:%d\n",*pt);
printf("打印出来为x的地址:%d\n",&x); //x的地址和值均为发生改变
结果:
printf("打印出来为pt的地址:%p\n",pt);
结果:
temp = *pt; //指针pt指向temp
printf("打印出来为temp的值:%d\n",temp);
printf("打印出来为temp的地址:%d\n",&temp);
printf("打印出来为pt的地址:%p\n",pt);
结果:
求解!!!!!!!!!!!
思考:指针对应变量的值相同则地址相同???
不同名变量值相同,变量的地址不同,为什么啊???
完整代码
#include <stdio.h>
int main()
{
int p = 0;
int temp = 0;
int *pt = NULL; //定义一个名为pt的空指针
int x = 5; int y = 6;
printf("打印出来为pt的地址:%p\n",pt);
pt = &x;
printf("打印出来为x的地址:%d\n",pt);
printf("打印出来为x的值:%d\n",*pt);
printf("打印出来为x的地址:%d\n",&x); //x的地址和值均为发生改变
printf("打印出来为pt的地址:%p\n",pt);
temp = *pt; //指针pt指向temp
printf("打印出来为temp的值:%d\n",temp);
printf("打印出来为temp的地址:%d\n",&temp);
printf("打印出来为pt的地址:%p\n",pt);
return 0;
}