| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10230 人关注过本帖
标题:gcc 中 sizeof(char*) 和 (int*)分别占用几个字节 /原因是什么?
只看楼主 加入收藏
小曹
Rank: 2
等 级:论坛游民
帖 子:8
专家分:24
注 册:2010-3-8
结帖率:0
收藏
已结贴  问题点数:15 回复次数:6 
gcc 中 sizeof(char*) 和 (int*)分别占用几个字节 /原因是什么?
code:
#include<stdio.h>
int main(void)
{
     char a[20] = "you are a boy!";
     char *p = a;
    char **ptr = &p;
   
    printf("**ptr = %c\n", **ptr);
    ptr++;
    printf("**ptr = %c\n",**ptr);

    return 0;
}
出现问题如下:1,ptr  指针类型是 char **,指针指向类型是 char *, 使用第一个printf函数后会输出数组a中的第一个单元内容y ,在ptr++之后再次使用printf结果为:错误。原因是什么?
                         分析如下:在  ptr++之前  其内容是:&p   ,之后应当是::&p + N,重点是这个N是多少,1or4,还是其他?
                      2,在GCC中实验printf("%d", sizeof(int *));   pintf("%d",sizeof(char*));两个函数输出都是4,这是为什么/   难道他们的长度一样吗?


[ 本帖最后由 小曹 于 2011-8-12 20:24 编辑 ]
搜索更多相关主题的帖子: 分析 include return 
2011-08-12 20:04
狂风VAH
Rank: 1
来 自:河南
等 级:新手上路
帖 子:13
专家分:8
注 册:2011-8-9
收藏
得分:4 
第一个没看懂
第二个
sizeof(int *) 和 sizeof(char *) 其中 int * 和 char * 都是指针,指针在32位系统中永远占4个字节不管他们到底指向什么
如: char *p="you are a boy!";
     printf("%d",sizeof(p));
结果还是4
2011-08-12 20:11
小曹
Rank: 2
等 级:论坛游民
帖 子:8
专家分:24
注 册:2010-3-8
收藏
得分:0 
第二个问题应该正如二楼回答              

2011-08-12 20:20
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:4 
*ptr存的使a的地址 **ptr=*a 即第一个字符
prt++ 那么*prt就是空的 在**Prt就出错了;
2011-08-12 20:49
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:4 
double *p类型 只占4字节 这是结果 为什么呢

p指的是内存里第一个字节 不是内存中的八字节
先指向内存中的第一字节只保存了第一字节地址 然后确定 *p是double 这时就是8字节了吧  但结果为什么是4字节
CPU控制内存有32地址总线 总共有2的32次状态能确定4G内存 不同状态能确定一个地址(编号) 无论是内存中的第一个编号还是最后个编号 都是4字节去保存
 
同理一样 我在反问下 p是指针变量 那结果一定是4字节 那为什么还要去确定是什么类型 多此一举?
我学的是C 在VC  6.00++中 如上举例

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-12 21:19
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:4 
指针变量在32位的系统里肯定都是4字节,因为32位的系统只支持4GB的内存,4个字节正好
可以表示所有内存的地址。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-08-12 21:35
strongmore
Rank: 2
等 级:论坛游民
威 望:1
帖 子:16
专家分:29
注 册:2016-12-22
收藏
得分:0 
     char t[20] = "you are a boy!";
     char *r = t;
    char **ptr = &r;
    printf(" %s\n", *ptr++);

这样可以打印出来那个字符串
打印字符串用s不是c,指针加放在printf里。
2016-12-22 18:32
快速回复:gcc 中 sizeof(char*) 和 (int*)分别占用几个字节 /原因是什么?
数据加载中...
 
   



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

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