易码技术论坛

 找回密码
 加入易码
搜索
查看: 1057893|回复: 10

[归档] C语言的指针问题

[复制链接]
发表于 2007-10-30 14:36:56 | 显示全部楼层 |阅读模式
在C语言中:
不允许把一个数赋予指针变量,故int *p; p=100;是错误的! 而在定义空指针时,把0赋予了指针变量#define NULL 0  int *p=NULL; 这是为什么?
是不是可以这样理解,因为内存地址100这个地方我不不知道存的是什么(有可能是系统数据),怕损坏那里的数据, 所以不允许把数赋予指针变量,而0它不指向任何一个内存地址(空的),所以就可以把0赋予指针变量?!
顺便问一下, 当定义int *p; p=100;后系统编译时会报错吗? 我没试过(学C不久,在网上没找到合适的Turbo C),我想应该会报错吧?
请个位大虾指教! 谢谢!
发表于 2007-10-30 20:42:02 | 显示全部楼层
0和非0是不一样的
非0会造成非法访问,在编译期间“100”字面量的类型是int,而你的p的类型是int *,会报类型不匹配的错误。
如果你用(int *)100强制类型转换的话,类型虽然OK,不过编译器一般会阻止你这样做。
具体情况怎样由编译器决定了。
发表于 2007-10-31 09:34:41 | 显示全部楼层
C語言中規定不能直接將地址賦給指針,不過具體編譯是否報錯就要看編譯器的實現了。
就如同瀏覽器的實現并不一定符合標準一樣。
不過自己寫代碼還是最好養成好習慣,按照標準來。定義完指針后養成賦值的好習慣,賦空值或者使其指向變量,以免野指針的存在,用完的指針記得賦空值
发表于 2007-10-31 18:36:40 | 显示全部楼层
原帖由 520madi 于 2007-10-30 14:36 发表
不允许把一个数赋予指针变量,故int *p; p=100;是错误的! 而在定义空指针时,把0赋予了指针变量#define NULL 0  int *p=NULL; 这是为什么?


'0'在编译器中是一个特殊的符号,它没有固定的类型,或者可以看作是任何类型的集合,任何变量都可以被赋'0'.而非'0'的常数和变量都有固定的类型,所以会受到限制.
发表于 2007-11-1 09:46:02 | 显示全部楼层
学校学习用还是tc,不过tc 2.0 DOS下的用着不习惯,用这个吧,同样是TC2.0的编译器,GUI的壳

TCforWin3.1.zip

900.88 KB, 下载次数: 11139

发表于 2007-11-1 14:49:06 | 显示全部楼层
#define NULL ((void*)0)
 楼主| 发表于 2007-11-2 15:49:22 | 显示全部楼层
原帖由 jason 于 2007-11-1 09:46 发表
学校学习用还是tc,不过tc 2.0 DOS下的用着不习惯,用这个吧,同样是TC2.0的编译器,GUI的壳

谢谢你的东西,不过你有好用的TC2.0也上传吧。我收了!
 楼主| 发表于 2007-11-2 15:51:40 | 显示全部楼层
哦,对了!感谢以上大虾的解答!
发表于 2007-11-2 16:46:44 | 显示全部楼层
tc已经没有好用的了,你用惯了图形界面,字符界面怎么都用不惯的……
tc从3.0开始就是C++了,只有2.0才是C。你就用tc for Windows 3.1吧,很好用的。

或者你直接转入学习win32平台C开发……选择就会很多了。入门还是TC吧
 楼主| 发表于 2007-11-2 17:23:30 | 显示全部楼层
哦! 谢了! 我现在看了各种C教材, 很少上机! 也不知道自己学得怎样!
发表于 2007-11-2 22:48:10 | 显示全部楼层
多练,没有上机条件,可以在纸上写……在基本的语法懂了后,多看源码
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-25 13:20 , Processed in 0.012342 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表