@(C语言)
[toc]
指针:指针变量存储的是变量类型对应的变量的值
&(取地址符)
&:是一个操作符,运用在内存中的对象上面,即变量或者数组元素。
*(间接寻址符)
或者叫:引用运算符
表示指针指向。
int * p;
p 是一个指针变量名
*p 是从p指针变量中取出一个int型数据
指针
int i =10;
//int型的指针变量 *p 存储的是 int型的数据的变量的地址
int *p;
p =&i;
printf("i 的值: %d \n",i);
printf("i 的地址: %#X \n",&i);
printf("p 的值: %#X \n",p);
printf("p 的地址: %#X \n ",&p);
输出:
i 的值: 10
i 的地址: 0XEFBFF5AC
p 的值: 0XEFBFF5AC
p 的地址: 0XEFBFF5A0
所以:&是指向变量的地址
*是指向&变量的地址
指针的定义与运算
int a =10;
int *p =&a;
*p = *p+10;
printf("p: %#X, a: %d \n",p,a);
int y = 1+*p;
printf("y: %d \n",y);
*p += 1;
printf("p: %#X, a: %d \n",p,a);
(*p)++;
printf("p: %#X, a: %d \n",p,a);
*p++;
printf("p: %#X, a: %d \n",p,a);
输出:
p: 0XEFBFF5AC, a: 20
y: 21
p: 0XEFBFF5AC, a: 21
p: 0XEFBFF5AC, a: 22
p: 0XEFBFF5B0, a: 22
指针运算:
*p 代表是它所指的地址上面的值的运算
p++ 是p 指针变量++,结果就是:p指向它的下一个地址
数组与指针
数组名就是数组的首地址
//数组名就是数组的首地址
int a[5]={1,2,3,4,5};
int *p =a ;
int z=3;
printf("%#X \n",a);
//a+5表示a移动到数组的第五个位置
for (int i=0; p<a+5; p++) {
*p =z;
}
for (int i =0; i<5; i++) {
printf("%d \n",a[i]);
}
输出:
0XEFBFF5A0
3
3
3
3
3
指针与函数参数
void swap(int *a ,int *b){
int temp =*a;
*a =*b;
*b =temp;
}
int x =10;
int y =20;
swap(&x, &y);
printf("x: %d \n",x);
printf("y: %d \n",y);
输出:
x: 20
y: 10
指针数组与数组指针
char * name[] ={"hello","baby","dink","love"};
//那么name就是个指针数组
char (*name)[] ={"hello","baby","dink","love"};
//name是数组指针,指向数组的首地址
二级指针
//二级指针存的内容是一级指针的地址
// p的值就是p的这个变量,这个变量保存的是a 的地址
//*p运算,得到的就是a的值
//*p2运算,得到的就是p的值
//**p2运算,得到的就是p的值的*运算得到的值 a;
int a =100;
int * p;
p =&a ;
int **p2;
p2 =&p;
// **p 的值是a--> *P2==P --->**P2==*P==a
函数指针
函数在内存中存储就是一段地址,而函数名就是这段地址的首位。
//
int plus(int a,int b){
return a+b;
}
//返回类型+参数类型
int (*calc)(int a,int b);
calc =plus;
int result =calc(3,5);
printf("result :%d \n",result);
网友评论