指针
什么是指针 作用
int test(int a,int salaray){
a + 1;
s + 1;
raturn a + 1;
}
int main{
int money = 10;
int salaray
money = test(money);
}
什么是指针
指针是一个变量
1.这个变量只能存地址
2.任何指针变量占据的内存空间都是八个字节
int a = 10; 普通变量
int *pa ;
函数指针
int (*test)(int a);9
1.* 在定义的时候表示一个指针变量
2.在表示的时候表示一个具体的值
3.指针变量赋值的时候只能赋地址
int temp = 10;
int *p;
*p = 20;
二级指针
int **p = &p
![$L(9BBB}L`M]F5C{1SV)2)V.png](https://upload-images.jianshu.io/upload_images/20123017-44d3ac1d72c03f0d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
指针的类型
1.普通指针
int*p char *p int (*func)(int)
2.常量指针
int a = 20;
int b = 30;
int const*pa = &a;
*pa = 50
运行错误
不能改变指针指向变量的值
pa = &b;
可以运行 可以改变指针的指向
3.指针常量
int *const pb = &a;
*pb = 50;
可以运行 可以改变指针指向的变量的值
pb = &b;
不能运行 不能改变指针的指向 数组就是一个指针常量 不能对数组名进行运算
4.指向常量的常量指针
int const*const pc = &a;
什么都不能改变
不能改变指针的指向
不能改变指针指向变量的值
指针变量只能存数组
指针变量只能指向同种数据类型的地址
指针的值
就是指向的内存空间的首地址
指针和数组
1.数组是一片连续的内存空间
2.指针只是一个变量 只能存地址
3.数组也可以用指针的方式访问
数组的第一种访问方式
num【0】 = 20 num【1】 = 30
第二种访问方式
*num = 20 *num + 1 = 30
指针里面不确定尽量加括弧 用来分清符号的结合方式
指针和函数
作用
- 通过指针间接访问某个地址
定义一个函数 什么情况下参数是一个指针
1.这个函数会不会改变传递过来的数据本身
2.需要改变外部的值 就将这个变量定义为指针变量
3.数组名没有分配内存空间 指针变量具有内存空间
4.数组是一片连续的内存空间 可以存多个值
5.指针只能存一个值 只能是地址
6.函数接收数组时必须知道数组元素的个数
7.函数里面是通过指针变量来接收数组的地址
8.指针变量无法确定指向内容的大小
访问数组有两种方式
1.数组名num【3】
2.\*(num+3)
注:声明变量 没有分配内存空间
定义变量 立刻分配内存空间 并且赋值