一天练习一个小C/C++程序(二) 指针到底该如何使用
2017-01-04 20:47
302 查看
以前写C基础的时候,写过很多次指针的例子,那到底指针在C项目中会怎么应用呢?
通常有两方面:
一:函数的传参:我们已经说过,函数传参除非传的是内存地址,要不修改后的值对传入之前的值没有影响。
二:跨函数修改值: 其实我觉得这个和第一条一样。。都是为了使其在另一个函数的修改无论在哪都生效。
三:定义数据结构。
其实可以发现,需要直接操作内存的情况下,就需要使用指针,这样指针才有意义。
例子:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
/**
* 定义一个通用换值函数
* 因为要通用,所以定义为void类型指针。void指针也叫做万能指针,因为它类型不确定,也不需要确定,仅直接代表内存首地址
*/
void swap(void *x,void *y,size_t sz){
void* temp = malloc(sz);
//memcpy函数:将第二个参数的指针对应的内存中的数据覆盖第一个参数指针对应的内存中数据,第三个参数为数据的长度
memcpy(temp,x,sz);
memcpy(x,y,sz);
memcpy(y,temp,sz);
}
int main(){
//int类型互换测试
int x = 1;
int y =5;
swap(&x,&y,sizeof(int));
printf("%d\n",x);
printf("%d\n",y);
//double类型互换测试
double dx = 22.22;
double dy =55.55;
swap(&dx,&dy,sizeof(double));
printf("%f\n",dx);
printf("%f",dy);
getch();
return 0;
}
结果:
而且我觉得绕什么3,4,5,6级指针更本没什么意义,我觉得大于等于三级指针应该不要出现,这只会让程序难以理解,如果你非要写一个三级指针,那么,或许你的解决办法并不是最优的,你需要再仔细想想了。指针其实挺有意思的。。。
通常有两方面:
一:函数的传参:我们已经说过,函数传参除非传的是内存地址,要不修改后的值对传入之前的值没有影响。
二:跨函数修改值: 其实我觉得这个和第一条一样。。都是为了使其在另一个函数的修改无论在哪都生效。
三:定义数据结构。
其实可以发现,需要直接操作内存的情况下,就需要使用指针,这样指针才有意义。
例子:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
/**
* 定义一个通用换值函数
* 因为要通用,所以定义为void类型指针。void指针也叫做万能指针,因为它类型不确定,也不需要确定,仅直接代表内存首地址
*/
void swap(void *x,void *y,size_t sz){
void* temp = malloc(sz);
//memcpy函数:将第二个参数的指针对应的内存中的数据覆盖第一个参数指针对应的内存中数据,第三个参数为数据的长度
memcpy(temp,x,sz);
memcpy(x,y,sz);
memcpy(y,temp,sz);
}
int main(){
//int类型互换测试
int x = 1;
int y =5;
swap(&x,&y,sizeof(int));
printf("%d\n",x);
printf("%d\n",y);
//double类型互换测试
double dx = 22.22;
double dy =55.55;
swap(&dx,&dy,sizeof(double));
printf("%f\n",dx);
printf("%f",dy);
getch();
return 0;
}
结果:
而且我觉得绕什么3,4,5,6级指针更本没什么意义,我觉得大于等于三级指针应该不要出现,这只会让程序难以理解,如果你非要写一个三级指针,那么,或许你的解决办法并不是最优的,你需要再仔细想想了。指针其实挺有意思的。。。
相关文章推荐
- [每日练习]如何使用一个指针来实现双向链表操作
- 【LVL1_5_c】【课后练习】【4】 定义一个函数,交换两个数的值。(使用指针)
- 指针的使用和练习 I - 如何通过指针访问的使用对象里的private信息
- 如何使用指针从函数返回一个数组。
- 如何使用一个指针来实现双向链表操作
- 【练习1】输出一个螺旋数组,可以很好地理解数组和指针的使用
- 计时精度到底毫秒级别或者更高 如何使用C#制作一个精确计时器
- 一天练习一个小C/C++程序(一) 控制台版“金山打字”游戏
- Fusion实例1:如何通过竞技场使用共享内存来发布一个指针?
- 如何在VB.NET中使用指针
- 如何使用Css样式自定义一个DataGrid的风格
- DELPHI如何使用指针
- 一个高级用户使用Vista Beta2一天的感受
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- Visual C#2005——如何使用ToArray方法返回一个强类型数组
- 想研究如何使用RUP来开发一个产品,一直不知道如何来应用?
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题(非原创,摘自书中)
- 如何使用一个不错的图表组件WebChart(免费)
- 使用 this 指针和 prototype 实现 js 的 OO 时的一个区别
- 使用 this 指针和 prototype 实现 js 的 OO 时的一个区别