29-指针的练习(包含指针的使用场景)
2014-10-02 16:33
239 查看
本节知识点:
1、指针练习
2、指针的使用场景
-------------------------------------------------------------------------------------------------------------------------------------------
1、指针练习
输出结果:
注意:
(1)调用函数swap,属于值传递,在swap函数结束后,内存会释放,不会改变main函数中的a,b的值;
(2)调用函数swap1,属于地址传递,只是改变了指针变量的指向,并没有改变内存单元中的内容;
(3)调用函数swap2,属于地址传递,直接操作地址,改变了指针变量指向的内存单元中的内容(即a,b的值)。
2、指针的使用场景
(1)在函数中访问调用者中的变量
(2)函数返回多个值
输出结果为:
1、指针练习
2、指针的使用场景
-------------------------------------------------------------------------------------------------------------------------------------------
1、指针练习
/* 使用函数来交换两个变量的值 */ #include <stdio.h> void swap(int p, int q) { int temp = p; p = q; q = temp; } void swap1(int *p, int *q) { // 这里temp是指针变量, 指针变量p和q传递进来, 赋值操作相当于改变指针的指向 int *temp = p; // temp指向p所指向的存储空间 p = q; // p指向q所指向的存储空间 q = temp; // q指向temp所指向的存储空间(即p所指向的存储空间) } void swap2(int *p, int *q) { // 这里temp是整型变量, 指针变量p和q传递进来, 通过*p和*q获取了它们所指向存储空间的变量值,因而可以改变变量的值, 完成值交换。 int temp = *p; *p = *q; *q = temp; } int main(int argc, const char * argv[]) { // 定义两个整型变量a, b int a = 10; int b = 20; // 打印a和b printf("交换之前:a = %d, b = %d\n", a, b); // 1.调用swap函数 swap(a, b); // 值传递无法改变函数外部的值, 因此无法使变量的值对换位置 printf("调用swap交换之后:a = %d, b = %d\n", a, b); // 2.调用swap1函数 swap1(&a, &b); // 地址传递, 但是只是改变了指针指向, 没有改变所指向存储空间的内容 printf("调用swap1交换之后:a = %d, b = %d\n", a, b); // 3.调用swap2函数 swap2(&a, &b); // 地址传递, 通过*p和*q完成了值交换 printf("调用swap2交换之后:a = %d, b = %d\n", a, b); }
输出结果:
注意:
(1)调用函数swap,属于值传递,在swap函数结束后,内存会释放,不会改变main函数中的a,b的值;
(2)调用函数swap1,属于地址传递,只是改变了指针变量的指向,并没有改变内存单元中的内容;
(3)调用函数swap2,属于地址传递,直接操作地址,改变了指针变量指向的内存单元中的内容(即a,b的值)。
2、指针的使用场景
(1)在函数中访问调用者中的变量
(2)函数返回多个值
#include <stdio.h> // 定义一个函数,用于计算两个数的和、差、积、商、以及余数 void heAndChaAndJiAndShangAndYu(int num1, int num2, int *he, int *cha, int *ji, float *shang, float *yu) { // 将num1 + num2的结果赋值给指针变量he所指向的存储单元(即(num1 + num2)的结果的存储单元) *he = num1 + num2; // 将num1 - num2的结果赋值给指针变量cha所指向的存储单元(即(num1 - num2)的结果的存储单元) *cha = num1 - num2; // 将num1 * num2的结果赋值给指针变量ji所指向的存储单元(即(num1 * num2)的结果的存储单元) *ji = num1 * num2; // 将num1 / num2的结果赋值给指针变量shang所指向的存储单元(即(num1 / num2)的结果的存储单元) *shang = num1 / num2; // 将num1 % num2的结果赋值给指针变量yu所指向的存储单元(即(num1 % num2)的结果的存储单元) *yu = num1 % num2; } int main (int argc, const char * argv[]) { // 定义整型变量a,b并初始化为0, int a = 0; int b = 0; // 定义整型变量he,cha并初始化为0,ji 初始化为-1 // 定义float类型变量shang,yu,并初始化为-1 int he = 0, cha = 0, ji = -1; float shang = -1, yu = -1; // 提示用户输入两个整数,用逗号隔开 printf("请输入两个整数(用逗号隔开):\n"); // 接收用户输入的两个整数 // 此处整形变量前面一定要加取地址运算符& scanf("%d,%d", &a, &b); // 调用函数,计算和、差、积、商和余数,这时a,b的值分别传递到函数的形参num1,num2; // he,cha,ji,shang,yu的地址传递给被调函数(地址传递) heAndChaAndJiAndShangAndYu(a, b, &he, &cha, &ji, &shang, &yu); printf("和: %d + %d = %d\n", a, b, he); printf("差: %d - %d = %d\n", a, b, cha); printf("积: %d * %d = %d\n", a, b, ji); printf("商: %d / %d = %.2f\n", a, b, shang); //printf函数打印 % 字符要用 %% 才能打印 printf("余: %d %% %d = %.2f\n", a, b, yu); return 0; }
输出结果为:
相关文章推荐
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- (转)关于C++中函数指针的使用(包含对typedef用法的讨论)
- C语言经典算法100例-066-练习使用指针
- 有一字符串,包含数字与字母,编程去除数字。要求: //要求在原字符串中操作 //使用指针处理
- c语言指针使用小练习
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 有一字符串,包含数字与字母,编程去除数字。要求:1、要求在原字符串中操作 2、使用指针处理
- 在结构体中包含自身类型指针时,使用typedef
- 交换两个数——练习指针的使用
- 有一字符串,包含数字与字母,编程去除数字。要求:1、要求在原字符串中操作2、使用指针处理
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于引用和指针的区别以及模板使用的练习
- TreeView、TreeNode练习,使用指针
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- C语言经典算法100例-068-练习使用指针3
- (无bug版)有一字符串,包含数字与字母,编程去除数字。要求: vae123rcly //要求在原字符串中操作 //使用指针处理