指针的基本概念
指针:就是内存中某个字节地址编号指针变量:用来存放地址变量
定义指针变量格式:指针所指向的数据类型 * 变量名
指针变量 8个字节的存储空间
没有初始化的指针里面放的也是垃圾值,这种没有指向指针我们成为野指针
指针的初始化方式
1、先定义再进行初始化
int *p;
p = &a;
2、定义同时进行初始化
int *pp = &a;
指针注意点
1、指向是什么样类型的指针将来指针存放什么类型的变量的地址2、指针变量不可直接赋值一个整形常量,只能存放变量地址
3、指针没有初始化不可以访问指针指向存储空间,里面是垃圾值,是一个没有指向指针,也就是说是一个野指针;如果你操作一个野指针就回导致系统崩溃
4、指针的指向是可以改变的
5、多个指针可以指向同一变量
定义指针的目的:
1、使用地址代替值拷贝 可以节省内存 2、共享数据
2、指针是用来访问它指向存储空间中的数据的,但是指针变量里面存放的仅仅变量的首地址,如果没有数据类型,访问它所在指向存储空间的时候不知道取多少字节数据3、指针区分类型 是为了当通过指针访问对应的存储空间的时候,取相应字节的数据
指针与数组
void test1(){//数组名不是一个指针
int nums[] = {1,2,3,4,5};
int *p = nums;
//第一个不同点
// sizeof 计算变量所在存储空间的字节数
int numsLength = sizeof(nums);
printf("%d\n",numsLength);
//指针变量占8个字节存储空间
printf("%lu\n",sizeof(p));
//sizeof(nums) != sizeof(p)
//当一个数组赋值给一个指针变量,有些信息就丢失了,这个称为信息遗失,比如数组长度
//第二个不同点
// nums = &nums 数组名的地址就是数组的地址,所以可以使用指针代替数组类型作为函数参数
printf("%p\n",nums);
printf("%p\n",&nums);
// p ! = &p 指针中存放地址与指针本身地址不同
printf("%p\n",p);
printf("%p\n",&p);
//第三个不同点
//数组名是不占用存储空间,当程序编译的时候所有出现数组名的地方都会被替换为数组的地址,所以不可以改变数组名的指向
//指针变量的指向是可以改变的
int num1s[] = {7,9};
// nums = num1s;
p = num1s;
printf("%d\n",p[1]);
}
指针运算
void test(){
//指针加法
int nums[] = {1,2,3,4,5};
int *p =