11.18C语言学习笔记(指针)

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);

猜你喜欢

转载自blog.csdn.net/FriedReich/article/details/121402242