11.18C语言学习笔记
指针
定义
指向地址的变量——一个值的guide——指针
&m——变量
举例:
int a=6;字符6占四个字节;
从内存(理解为条)首字节号以后占四个字节,第一个字节成为首地址——也就被称为指针。
scanf_s("%d",a);
int p=6;
printf("p=%d\t%p\n",p,&p);//引号内的 第一个对标值 第二个对标指针的值
tip
指针本身也是一个变量,也有自己的地址和值。
“*”指针运算符
int p=6;
int *p=&p;//定义指针变量的值为p的地址
同数据类型的指针可以相互赋值。
举例:
int c=10;
int *p=&c;
printf("\t adress\tvalue\n");
printf("c:\t%8p\t%8d\n",&c,c);//p对标赋值c的地址
printf("p:\t%8p\t%8d\n",&p,p);//但p本身也独占内存,并且有自己的值
直接访问与间接访问
“*”间接引用运算符 “&”取址符
int a,*p=&a;
p=&a;
*p=a;(互逆思想)
(*和&放在一起可以消掉?)
答曰:不一定——&*a就不存在,因为a本身就是一个非地址的简单变量。不可以溯源其值。
空指针 (数据类型) *x=0 或者 NULL
指针的运算
(单位为4字节)
加减——当前地址值加 i*sizeof(基类型)
改变大小,指向的内存位置也会改变。
tip 地址的首地址头尾要齐全(懂了又没有完全懂)
指针与数组
地址的偏移量来定位数组的下标。
数组名[] 此后调用“数组名”便是数组的首地址。
p=score;
p[i]=score[i]; 二者等价
1、p++指针本身改变;
2、p+i 指针本身的值不改变,在其基础上加下标;
简例
int a[5]={1,2,3,4,5}
int *p=&a[3];
*p=100;
printf("%d\n",p++);
printf("%d\n",p--);
printf("%d\n",--p);