[问题] 指标(存取特定内存位址)

楼主: ftpui (rei)   2014-11-19 15:44:54
问题(Question):
小弟看到下面程式码
int *ptr;
ptr=(int *)0x5678;
查询网络资料是说明上面程式码表示
ptr此指标指向位址0x5678
不太明白为什上述程式码能做到,指标不是就指向某变量的位址吗(&var)
但0x5678也不是变量,谢谢大家
作者: ichleibeqbi (positive)   2014-11-19 16:51:00
简单理解指标 就是一个存位址的变量不限定一定要是变量位址 也可以是内存的某个位址
楼主: ftpui (rei)   2014-11-19 16:53:00
那如果把0x5678当位址就直接放进去ptr
作者: ichleibeqbi (positive)   2014-11-19 16:53:00
但直接指定位址很危险 因为很可能操作在不合法的位址
楼主: ftpui (rei)   2014-11-19 16:54:00
为何还要转型成指标型态 谢谢
作者: ichleibeqbi (positive)   2014-11-19 16:54:00
除非你很确定你做的事 或是写比较低端的程式才会用
楼主: ftpui (rei)   2014-11-19 16:55:00
转型是转成合法位址吗??? > <
作者: ichleibeqbi (positive)   2014-11-19 16:56:00
告诉compiler 0x5678是一个int type的位址位址合不合法要看你的应用内存运作可以去看一些OS相关的书 里面讲得比我清楚
楼主: ftpui (rei)   2014-11-19 17:01:00
可是(int *)0x5678 不是把0x5678转成int型态的指标吗???还是我理解错误 > <
作者: dirkc (3781615)   2014-11-19 17:05:00
转型是为了等号左边,例如:double ptr;ptr=(double)0x5678;"ptr此指标指向位址0x5678" 这句话是错的
作者: ichleibeqbi (positive)   2014-11-19 17:14:00
应该如何解释 求教
作者: nctucch17170 (kkadam)   2014-11-19 17:35:00
你可以print &ptr *ptr 看看 在想想
作者: dirkc (3781615)   2014-11-19 18:14:00
回一楼:通常说指标p指向物件a,意指对p做dereference后等于a也就是*p等于a; 从原po程式码来看并非如此囉
作者: ichleibeqbi (positive)   2014-11-20 01:22:00
指标实际上不就是指向某个位址无关dereference吧ptr指向位址0x5678, 而*ptr则是位址0x5678的值
作者: dirkc (3781615)   2014-11-20 10:23:00
这样解释也可以啦,只不过就会变成"指标p指向物件a"和"指标p指向物件a的位址"这两句话都对;我原意是想区分一下两者差异我想区分原po的和int *addr=(int*)0x5678;int **ptr=&addr;
作者: Killercat (杀人猫™)   2014-11-21 01:34:00
指标转型 基本上都是“怎么解释这个指标”这指标要拿多长来解释?里面的东西要怎么翻译?像是编译器看到char*就知道 这指标要一路往后拿到第一个\0为止,看到int*就知道一共要拿4bytes做endian
作者: Jotarun (forever)   2014-11-21 12:59:00
这是dsp的code?

Links booklink

Contact Us: admin [ a t ] ucptt.com