| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 453 人关注过本帖
标题:一个指针问题
只看楼主 加入收藏
镖叔
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-10-4
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:8 
一个指针问题
#include <stdio.h>
void main ()
{
  int *t="4568";
  puts(t);
  getch ();
 }
我想问一下这个函数的具体过程,我不太懂 int *t="4568";和put(t)的指针过程。求解救啊
搜索更多相关主题的帖子: include void 
2012-10-12 21:31
阿伟学编程
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2012-10-12
收藏
得分:0 
“4586”是一个地址名。。。。其余的是不是你写错了,不完整啊。。。

兴趣是第一老师
2012-10-12 21:48
Leo_messiver
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-10-12
收藏
得分:0 
int *t="4567";?????
这个是要干嘛呢??定义int型指针t,然后将"4567"字符串给t?字符串常量怎么能用来给地址赋值呢??
2012-10-12 21:52
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 楼主 镖叔
    首先对于int *t="4568",t则指向"4568"字符串的首地址;      
    其次puts(t)函数用来输出t所在地址的字符串。
2012-10-12 21:52
KingStoneBoy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-6
收藏
得分:0 
回复 楼主 镖叔
4568肯定是地址名,是把4568里的数据赋值给t吧
2012-10-12 22:04
micholasmalo
Rank: 2
等 级:论坛游民
帖 子:40
专家分:62
注 册:2012-6-22
收藏
得分:0 
楼上的不理解就不要随便评论把楼主往错路上引
int *t="4568"根本就通不过编译,C对数据类型是很严格的,定义为CHAR才行,这样T才是指向内存中4568这个字符串的地址
2012-10-13 01:45
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:10 
可以通过编译,看你用什么编译器,有些编译器不会报错的,比如wintc,显示结果还是正确的。
使用gcc编译器,会给出几个警告,结果也是正常的。用gdb去跟踪,发现实际上4,5,6,7实际上分别用了1个Byte的内存空间,因此用puts可以输出。
x/8xb t
0x8048560:    0x34    0x35    0x36    0x37    0x00    0x25    0x63    0x2c



[ 本帖最后由 pauljames 于 2012-10-13 07:25 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-10-13 07:11
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:10 
int *t="4568";是可以的,编译器会把字符串常量"4568"的首地址赋值给t,但首地址是char *类型的,所以进行了一次强制类型转换,编译器会给出一个警告
puts(t);的时候t代表的是转换后的int *类型的地址,所以puts()函数把int*类型地址强制转换为char *类型,然后输出以此地址为起始的字符串。编译器也会给出一个警告:
test1.c:4: warning: initialization from incompatible pointer type
test1.c:5: warning: passing argument 1 of ‘puts’ from incompatible pointer type
但程序是可以运行的
2012-10-13 10:41
cjbs10086
Rank: 2
等 级:论坛游民
帖 子:32
专家分:45
注 册:2012-10-13
收藏
得分:0 
首先“4568”表示一个字符串常量指针 如,
#include<stdio.h>
#include<string.h>
int main()
{
    printf("%s\n","4568"+1);
    return 0;
}
因此 t就指向了“4568”的起始地址,所以调用puts()函数,可以直接输出字符串
2012-10-14 15:43
快速回复:一个指针问题
数据加载中...
 
   



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

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