TC官方合作论坛

标题: TC为什么要引入指针的概念? [打印本页]

作者: seemk    时间: 2015-12-28 10:03
标题: TC为什么要引入指针的概念?
本帖最后由 seemk 于 2015-12-28 10:06 编辑

TC本来就是非强制类型的语言,如果引入了指针的概念,感觉怪怪的.比如"获取变量指针"这个函数,实在没想出来有什么用,我猜测有两种可能:

1.通过指针,调用系统api时传递地址
这个是不对的,应该用"获取变量地址"这个函数传递地址
2.通过指针,用来改变其它变量的值
比如调用函数时,使用指针传参,改变函数外部变量的值.虽然这样可以,但是据我所知TC的api都使用&引用来改变外部的变量吧?而且帮助文档里也写了这个方法:

而且引用传参比指针传参更直观易用,所以调用函数时,使用引用传参就够了.

但是TC里引用的概念只能能用在函数参数变量里,不能用在普通变量里,比如这样写是不行的(虽然我认为这样写是最科学的):

变量 临时=123
变量 &临时引用=临时
临时引用=456  //通过引用改变了其它变量的值

莫非TC里指针的概念就是用来解决这个情况的?如果是这样,我建议TC应该支持使用上面的写法来解决(尽管它现在不支持),而不要使用指针的概念,容易使新手迷茫



作者: jimye0526    时间: 2015-12-28 12:51
你懂的,tc就是这么任性,其实对于没编程基础,或者就是玩一点易语言的都搞不清指针是怎么回事,直接来变量地址更直接易懂
作者: 千叶de悠一    时间: 2015-12-28 18:00
那是为了 支持 win32 api准备的
作者: sam7894604    时间: 2015-12-28 19:53
参考
http://bbs.tyuyan.net/thread-54566-1-1.html
作者: seemk    时间: 2015-12-29 09:30
本帖最后由 seemk 于 2015-12-29 09:37 编辑
sam7894604 发表于 2015-12-28 19:53
参考
http://bbs.tyuyan.net/thread-54566-1-1.html

感谢关注!

下载了您的代码,我尝试使用引用来代替指针,结果以失败告终.总结如下:

TC是无法通过API给回调函数传递引用的,所以只能用"获取变量指针"这种传参方式来改变外部变量了(使用全局变量的方法除外)
"获取变量地址"也不能实现这样的需求,因为TC只有"地址取值"而没有"地址引用"(有就好了),所以无法改变外部变量的值

鄙人认为,有一种API函数似乎是TC调用不了的,比如这个API的某个参数是整形数组,也就是int *类型,而这个API的功能是改变这个数组的值.而"获取变量地址"是无法获取数组的地址的,所以这种情况是不是无法使用TC调用呢?
作者: sam7894604    时间: 2015-12-29 19:10
seemk 发表于 2015-12-29 09:30
感谢关注!

下载了您的代码,我尝试使用引用来代替指针,结果以失败告终.总结如下:

1. 变量指针与变量地址是不同的东西
  变量指针:取的是该变量的内存地址
  变量地址:取的是该变量中保存的数据地址

2. int * 类型,如果你确定是数组,那可以用结构体作为代替使用,效果相同

作者: seemk    时间: 2015-12-30 09:09
sam7894604 发表于 2015-12-29 19:10
1. 变量指针与变量地址是不同的东西
  变量指针:取的是该变量的内存地址
  变量地址:取的是该变量 ...

1.原来TC里的变量的概念是这样的,一直以为TC里的变量地址就像C语言那种变量地址呢

谢谢
作者: mjg2009    时间: 2016-1-1 09:43
seemk 发表于 2015-12-29 09:30
感谢关注!

下载了您的代码,我尝试使用引用来代替指针,结果以失败告终.总结如下:

内存数据无类型。不管是数组还是结构体,都是一块连续的内存。
直接申请一块内存把指针传进API里面,然后把这块内存里的数据再还源为组数或结构体就行了。没有调用不了的
作者: unlix    时间: 2016-2-2 21:01





欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1