1、指针变量
用来存放地址的变量,就是指针变量
2、指针?
就是地址
3、指针变量的定义
数据类型 *指针变量名;
int *p; //定义了一个指针变量,变量名是p
//int表示,p只能存放一个int类型的变量的地址
char *p1; //定义了一个指针变量,变量名是p1
//p1只能存放一个char类型数变量的地址
int num=10;
char *p = # //警告
4、指针变量定义的注意事项
(1)“*” 必须得有,如果没有就相当于定义一个普通变量
(2)指针变量能用来存放数值或者字符之类的吗? 不能
(3)指针变量,归根结底还是变量,也有全局和局部变量之
5,指针变量的初始化和引用
#include <stdio.h>
int main(int argc, const char * argv[]) {
//定义两个变量,并且给变量进行初始 a = 4, b = 5
int a=4,b=5;
//先定义变量,然后在初始化变量值
int a1;
a1 = 10;
//指针变量也是变量
//指针变量的使用: 定义指针变量 ----> 初始化指针变量 ---> 使用(使用指针变量间接的存取内存单元的值)
//指针变量如果不初始化会有什么后果?
//结论:如果一个指针变量定义以后,如果不进行初始化
// 这个指针变量存放的事一个垃圾数,这个指针变量,称之为 野指针
//一定要避免操作野指针,因为可能会带来意向不到的错误
// int *p10; //值是一垃圾值,有可能存放是系统程序的地址
// *p10 = 438; //可能会造成系统崩溃
//
// p10 = &a;
//指针变量如何进行初始化,指针变量应该用地址初始化
//1) 定义的同时进行初始化
// (1)完全初始化
int *p = &a; //用a的地址初始化 p这个指针变量
//另外一种描述方法:p指向了a
int *p1 = &a,*p2 = &a; //p1 p2都指向了a
// (2)部分初始化
int *p3 = &b,*p4; //定义了两个指针变量 p3 p4
p4 = &b;
//2)先定义后初始化
int *p7;
p7 = NULL; //
//(3)如果定义了一个指针变量,但是我不知道让这个指针指向谁
int *p5 = NULL; //NULL 是空(0)
int *p6 = 0; //空
//把一个指针赋值一个空,什么也不指
//常见的易犯的错误
// int *p8 = 1000; 杜绝
p6 = p1; //p6指向了a
//******************2、用*来获取指针变量指向的存储单元的内容*****]
//定义了一个整形变量 *p1 ,p1是一个指针变量
// *指针变量 作用:获取指针变量指向的内存空间的内容
// 获取指针变量值所对应的存储单元
int value = *p1; //4
// 给指针变量指向的内存单元赋值
*p1 = 100;
value = *p1; //100
printf("value = %d\n",a);
//"*" 的两种用法
//(1) 用于定义一个指针变量
// (2) 存储指针变量指向的存储空间的内容
return 0;
}
指针的应用场景:
(1)在被函数中可以修改主调函数中的变量的值
(2)让函数可以有多个返回值
#include <stdio.h>
/**
* 定义了一个函数
* 在函数内部通过指针变量修改指针变量指向的内容
*/
void changValue(int *p){
*p = 100;
}
void test(){
int a = 1;
int *p1 = &a; //p1指向了a
printf("%p\n",&a);
printf("%p\n",p1);
changValue(p1);
printf("%d\n",*p1); //1
printf("%d\n",a);
}
/**
* 用指针让函数可以有多个返回值
* 并不是有多个return
*/
void caculator(int x,int y,int *add,int *jian,int *cheng,float *chu){
//在函数的内部访问了主调函数中的变量值
*add = x+y;
*jian = x-y;
*cheng = x*y;
*chu = x/(float)y;
}
int main(int argc, const char * argv[]) {
int add=0;
int jian=0;
int cheng=0;
float chu=0.0f;
caculator(12, 4, &add, &jian, &cheng, &chu);
printf("add = %d\n",add);
printf("jian = %d\n",jian);
printf("cheng = %d\n",cheng);
printf("chu = %.2f\n",chu);
return 0;
}
6,指针变量定义的注意事项
(1)“*” 必须得有,如果没有就相当于定义一个普通变量
(2)指针变量能用来存放数值或者字符之类的吗? 不能
(3)指针变量,归根结底还是变量,也有全局和局部变量之分