标题:谁能解释一下这个关于强制转型的问题~
只看楼主
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
已结贴  问题点数:20 回复次数:4 
谁能解释一下这个关于强制转型的问题~
下面程序的运行结果是怎么回事~有谁能解释一下~
程序代码:
#include <stdio.h>
int main ()
{
    void* k=NULL;

    printf("%d %d\n",(int* )k+1,(int** )k+1);
    printf("%d %d\n",(float* )k+1,(float** )k+1);
    printf("%d %d\n",(double* )k+1,(double** )k+1);
    printf("%d %d\n",(char* )k+1,(char** )k+1);

    return 0;
}




[此贴子已经被作者于2017-2-21 09:38编辑过]

2017-02-21 09:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
解释什么?
TYPE* p;
p 和 p+1 相隔 sizeof(TYPE) 字节。

比如 (double*)k+1
此时 TYPE 是 double,所以相隔 sizeof(double) 个字节,也就是 8

比如 (double**)k+1
此时 TYPE 是 double*,所以相隔 sizeof(double*) 个字节,也就是 4
2017-02-21 09:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 2楼 rjsp
已经明白了~多谢解答~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-21 09:56
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
得分:0 
这样也可以
程序代码:
#include <stdio.h>
int main ()
{
    void* k=NULL;

    printf("%d %d\n",(int* )k+1,(int** )k+1);
  

    (int*)k;
    printf("%d %d\n",k,(char** )k+1);

 

    return 0;
}


我是硬件工程师
2017-02-21 20:20
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
指针“大小”属性的体现,即k地址每个数据块的大小。
2017-02-22 08:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-474391-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016039 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved