day10-指针
指针:
硬件
指针:
指针+ 基本数据类型
指针+ 数组
指针+ 函数
指针+ 指针
指针:
指针
------------------------- 间歇性学习
1. 指针
地址 ---- 内存单元的编号
pointer //指针
2. 黑客
3.指针变量
语法:
基类型* 指针变量名;
基类型 --- 数据类型
//基本数据类型
//数组类型
//基类型 表示 指针变量 指向的目标的 数据类型
* --- 表示此时定义的变量 是一个指针类型的变量
指针变量名 --- 标识符命名规则 + 见名知意
int * p; //表示定义了一个指针类型的变量
int a = 10;
float b = 1.23;
int *p = &a; //指针变量 p 指向 了 int型变量a
p变量的数据类型 int * //指针类型
&b --地址值 ---类型?
float
b有一块内存空间 -- 放的是float类型的数据
&b ---得到了一块 存放着 float类型数据的 空间的地址
float *p1 = &b;'
float b = 10;
&b --- > 地址值的类型 -->float *
b的数据类型--决定了这块空间放的的数据类型
&b --获得了 这块空间 的地址编号
float * //这种类型的地址数据
float *p1 = &b;
举例区别含义
int arr[5] //名为arr的数组,数组里有5个元素,每个元素是int
int* p1[5] //指针数组,数组里有5个元素,每个元素是int*
int (*p2)[5] //数组指针,一个指向数组(里面有五个元素,每个元素是int)的指 针
int (*p3[5])[5] //p3[5]是一个有5个元素的数组,数组里每个元素是int(*)[5]
---------------------------------------------------------
指针变量:
访问变量时:
直接访问
间接访问 通过地址访问到的
* 指针运算符
* 单目运算
运算数必须是指针类型的值(地址)
*p 过程
1.首先拿出p指针变量中的值(地址) 到内存中定位
2.从定位处开始,偏移出sizeof(基类型)大小的一块空间
3.把这块空间当做一个 基类型的 变量来看
指针数组和数组指针的区别:
指针数组,如:int *p[3]
指针数组:指针数组可以说成是指针的数组,首先这个变量是一个数组。
其次,指针修饰这个数组,意思是说这个数组的所有元素都是指针类型。
在32位系统中,指针占四个字节,而在64位系统中,指针通常占八个字节
数组指针,如:int (*p)[3]
数组指针:数组指针可以说成是数组的指针,首先这个变量是一个指针。
其次,数组修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址
int a = 10; //整型
int *p = &a;
printf("%d\n",*p); //*p<=>a
a = 20;
*p = 20;
int addOne(int n) //[xxx]
{
n = n + 1;
return n;
}
int main(void)
{
int n = 10;
addOne(n); //[10]
}
数组和指针的关系
二级指针
想实现:
被调修改主调
1.想修改谁,就把谁的地址传过去
2.必须要做*运算(间接访问),实现修改
练习:
求两个数的和 --函数
int add(int a,int b)
{
return a + b; //只能带出一个结果
}
数组指针
指向指针的指针
练习:
找出两个数中最大值 最小值
练习:
main函数中有两个数据
a=10,b=20
写个函数
交换a b的值
swap()
----------------------------------------
指针的运算:
1. &
2. *
3. p+1 //指向了下一个一基类型的数据
//跳过了一个基类型
4. p++
//声明了一个普通变量 a
int a;
//声明一个指针变量,指向变量 a 的地址
int *pa;
//通过取地址符&,获取 a 的地址,赋值给指针变量
pa = &a;
//通过间接寻址符,获取指针指向的内容
printf("%d", *pa);
遍历数组:递增一个指针
我们喜欢在程序中使用指针代替数组,因为变量指针可以递增,而数组不能递增,数组可以看成一个指针常量。
下面的程序递增变量指针,以便顺序访问数组中的每一个元素:
指针 + 数组
一维整型数组
int a[5]; //a首元素的地址
//a[0] -- int型
//&a[0] -- int *
int *p = &a[0];
= a;
a[i] <=> *(a+i) //指针运算
练习:
找最大值 ,指针的方式访问
野指针 ---指向不明确 ,随机
NULL 表示 0号地址