2019-12-11 18:31发布
tragedy 发表于 2018-5-21 14:17 不透明指针 https://stackoverflow.com/questions/3279683/never-defined-structure 这里有楼主要的答案 ...
zhugean 发表于 2018-5-22 08:42 我的问题是找不到真正定义的地方,这样定义起什么作用.
zhugean 发表于 2018-5-22 09:16 谢谢!还是你能理解我的问题。 看了关于透明指针的介绍,真是学无止尽啊 ...
zhugean 发表于 2018-5-22 09:21 谢谢,指教。 其实不完整类型也好透明指针也好,他们的作用是类似的。
湛无双 发表于 2018-5-21 23:58 西科大的?校友啊
最多设置5个标签!
谢谢!还是你能理解我的问题。
看了关于透明指针的介绍,真是学无止尽啊
在 8 楼,takashiki 已经给出了答案。
这是写法叫做:不完整类型(incomplete type)。
你可以去搜索一下调用 struct sqlite3_stmt 或者 sqlite3_stmt 的地方,肯定都是以指针形式出现的。
也就说调用形式都是 struct sqlite3_stmt * 或者 sqlite3_stmt *。
编译器不需要知道 struct sqlite3_stmt 的定义,就可以用来定义一个指针,因为指针的 size 是确定的,对于 32bit 的平台,指针总是 32bit 的。
至于为什么要出现这么一个结构体定义,本质原因是为了封装、隐藏细节。
真正的结构体,会在内部定义,对外呈现的 API 接口,统一是 struct sqlite3_stmt * 或者 sqlite3_stmt * 的抽象类型。
换个角度来看,你可以视为是 void * 类型。这样应该好理解一点,只不过用 struct sqlite3_stmt * 或者 sqlite3_stmt * 的话,编译器会帮我们做静态类型匹配检查,代码的可阅读性也好一点。
你错了,问题的本质是不完整类型。
不透明指针,只是封装作用的一种解释。
本质是靠不完整类型来支撑实现,这个才能解释你的为什么。
不透明指针只是一种别名解释。
是啊,你好校友
一周热门 更多>