`
fujinbing
  • 浏览: 233226 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c类型转换

阅读更多


在很多C程序钟,都看到这样的用法,如

A   和   B是2个结构

func(A   *p)
{
    B   *pStr;
    pStr   =   (B   *)p;
  
    /*对于结构指针pStr的操作*/
    .........
}

1、在进行指针类型转化时,需要注意什么?
2、结构A   和   结构B   应该有什么关系么(父类?子类?)?

ps:我倒是知道,经常将入参的指针类型生命为   (void   *),然后在函数内部,再将其转换为其他类型的指针。
甚么父类子类的,又不是c++就像一本书,你觉得非常好,可是他觉得很差,书,还是书,没有变,变的是你们两个对书的想法(也就是对这断内存中数据的解析方式不同而已)
哦,的确,这里面不涉及到什么父类、子类的问题,我也只是随便联想了一下。

指针所表达的就是内存中的一个地址,如果是一个相对小的   被   转换成   一个相对大   的,
那么,会出问题么?

会有越界问题么?

我的提问可能不是很清楚,希望可以得到高手的点拨
如果sizeof(A)> =sizeof(B)没有越界问题.否则会引起越界问题的.
这个看使用者是如何做了.
内存象一块面,数据类型象一个模子,同样一块面,使用不同的模子切,会展现不同的形状,需要考虑的是,切面时一定要切在系统允许你切的面上,
1、在进行指针类型转化时,需要注意什么?



      你要清楚这两个类型,清楚为什么要转
  

2、结构A   和   结构B   应该有什么关系么(父类?子类?)?

      A   B   起码大小以至,一般要求数据格式一致


给你看个例子就完了:

structarpcom   {
struct   ifnet   ac_if;/*   network-visible   interface   */
u_charac_enaddr[6];/*   ethernet   hardware   address   */
structin_addr   ac_ipaddr;/*   copy   of   ip   address-   XXX   */
structether_multi   *ac_multiaddrs;   /*   list   of   ether   multicast   addrs   */
intac_multicnt;/*   length   of   ac_multiaddrs   list   */
};

struct   arpcom   arp_com;
struct   arpcom   *p_arp_com   =   &arp_com;
struct   ifnet     *ifp   =   &(arp_com.ac_if);

那么p_arp_com是一个指向arpcom结构的指针,ifp是指向arpcom结构中的ifnet结构的指针。
这两个指针的值是一样的。
这个时候就可以这样用:

struct   arpcom   arp_com;
struct   arpcom   *p_arp_com   =   &arp_com;
struct   ifnet     *ifp;
.
.
.
ifp   =   (struct   ifnet     *)p_arp_com;



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics