【掌握】指针变量概念及定义方法
1、指针变量 用来存放地址的变量,就是指针变量 2、指针? 就是地址,地址是个常量 3、指针变量的定义 数据类型 *指针变量名; int *p; //定义了一个指针变量,变量名是p //int表示,p只能存放一个int类型的变量的地址 char *p1; //定义了一个指针变量,变量名是p1 //p1只能存放一个char类型数变量的地址 int num=10; char *p = # //警告 4、指针变量定义的注意事项 1)“*” 必须得有,如果没有就相当于定义一个普通变量 2)指针变量能用来存放数值或者字符之类的吗? 不能 3)指针变量,归根结底还是变量,也有全局和局部变量之分
【掌握】指针变量的初始化和引用
#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 #include <stdio.h> 2 3 /** 4 * 不能交换 5 * 6 * @param a <#a description#> 7 * @param b <#b description#> 8 */ 9 void swap1(int a,int b){ 10 11 //此处实质上是形参a和b值得交换, 12 //跟实参没有关系 13 int temp; 14 temp = a; 15 a = b; 16 b = temp; 17 18 } 19 20 //怎么交换正确的交换两个变量的值 21 void swap2(int *p,int *p1){ 22 23 //形参变量的地址进行的交换 24 int *temp; 25 temp = p; 26 p = p1; 27 p1 = temp; 28 29 } 30 31 //终级解决方案 32 void swap3(int *p,int *p1){ 33 34 //通过指针直接修改变量的值了 35 int temp; 36 temp = *p; 37 *p = *p1; 38 *p1 = temp; 39 40 } 41 42 int main(int argc, const char * argv[]) { 43 44 int a = 4,b = 5; // a = 5,b = 4 45 printf("交换前:a = %d,b = %d\n",a,b); 46 swap3(&a, &b); 47 printf("交换后:a = %d,b = %d\n",a,b); 48 49 50 51 return 0; 52 }
【掌握】总结*使用场合
指针的应用场景: 1)在被函数中可以修改主调函数中的变量的值 2)让函数可以有多个返回值
1 #include <stdio.h> 2 3 /** 4 * 定义了一个函数 5 * 在函数内部通过指针变量修改指针变量指向的内容 6 * @param p 7 */ 8 void changValue(int *p){ 9 10 *p = 100; 11 12 } 13 14 void test(){ 15 16 17 int a = 1; 18 int *p1 = &a; //p1指向了a 19 20 printf("%p\n",&a); 21 printf("%p\n",p1); 22 23 changValue(p1); 24 25 printf("%d\n",*p1); 26 printf("%d\n",a); 27 28 } 29 30 /** 31 * 用指针让函数可以有多个返回值 32 * 并不是有多个return 33 * 34 * @param x <#x description#> 35 * @param y <#y description#> 36 * 37 * @return 38 */ 39 void caculator(int x,int y,int *add,int *jian,int *cheng,float *chu){ 40 41 //在函数的内部访问了主调函数中的变量值 42 *add = x+y; 43 *jian = x-y; 44 *cheng = x*y; 45 *chu = x/(float)y; 46 47 } 48 49 int main(int argc, const char * argv[]) { 50 51 test(); 52 53 int add=0; 54 int jian=0; 55 int cheng=0; 56 float chu=0.0f; 57 58 caculator(12, 4, &add, &jian, &cheng, &chu); 59 60 printf("add = %d\n",add); 61 printf("jian = %d\n",jian); 62 printf("cheng = %d\n",cheng); 63 printf("chu = %.2f\n",chu); 64 65 return 0; 66 }
0x7fff5fbff70c 0x7fff5fbff70c 100 100 add = 16 jian = 8 cheng = 48 chu = 3.00
时间: 2024-10-14 01:55:56