前边发了一个帖子,也就lcoftp和另一个哥们回复的是对的(一直忘了给芯币,别火,我是真把这事情给忘了,几百个上千个芯币没法我自己给,我得找管理员,少不了你们,我回头会给的哈)
其实关于C指针,有好些玩法,但是刚学那会是真心体会不到的。
比如说前面我发的那个 利用指针(其实已经不能说是指针了,因为我的做法和lcoftp他们还有点不同,我是直接宏定义地址来操作的)
但是这也算是利用指针和地址来操作。
不说废话了,感觉我刚睡醒脑子不清醒,直接发下边这个不算题目的例子吧。
举个例子,现在我要在一片存储区里存储以下一系列变量
int anout;
float damn;
double fu;
.....
其实你知道都是我瞎编的,关键是,这些变量里包含各种各样的类型。
有 char int long long,乃至float double.
所以,如果我们要写一个 统一 的 读写接口,你会怎么写这个接口呢?
这是问题一,不过我相信,这个问题的答案是很显然的,你们一定会马上想到。
问题二:
最终到了读写存储区的时候,显然,我是不可能直接 写入 类似于 3.42,-0.3这样的浮点数进去的,读写存储区必然是以一串字符写进去的。
那么问题就是。
你会怎么实现 诸如 double fu到 一串字符 写进去 和 读出来 这个过程中的 数据转换?
还有一个参数,存储位置的地址。
话说,把void*,也就是存储的内容 命名成 地址,这倒是挺有意思的。
我觉得void *指针是一个很好用的东西,忽略了各种类型的细节,统一的 指针占用为一个整形
问题一:通用类型指针和具体指针转换的问题。
问题二:借鉴memcpy函数解决这个问题。
作为一个菜逼,干货并没有多少。唯一会的就是水,所以回帖水分大。望见谅!
应该还有一个变量指针的参数吧,可以是 void *buf ,这样可以兼顾不同类型的变量
问题1:写变量到存储器中,也就是把变量所占用的内存保存起来,读写接口大致需要两个参数,一个是变量的地址,一个是变量所占的内存大小,例如:
int write_ee(void *addr, size_t cnt);
int read_ee(void *addr, size_t cnt);
问题2:按着变量地址从低到高写入,读的时候从低到高读出就行了。
PS:其实这些说白了都是一些小花样。
一旦说穿了啥意思都没有。
但是这些东西都意味着能否从 存储和内存的角度去理解C的一些语法要素。
掌握了这些才能说是懂得一些指针,而指针就是C的灵魂,我知道它很危险很容易出事,但是如果你不用它,那你用C干什么呢?
我觉得指针还有一个很重要的就是函数指针
可以实现任务钩子函数,这在操作系统中很重要
那个,写的地址是不是也该用指针作为变量添加进去啊?
int write(void *buf_dst_addr, void *buf_src_addr, int dataLen);
本帖最后由 lonerzf 于 2015-6-22 15:31 编辑
是的,只不过,很多事情最后只是接口上简化了,内里还是一样的很多事情要处理。
转过去了还得转回来。