520madi 发表于 2007-10-30 14:36:56

C语言的指针问题

在C语言中:
不允许把一个数赋予指针变量,故int *p; p=100;是错误的! 而在定义空指针时,把0赋予了指针变量#define NULL 0int *p=NULL; 这是为什么?
是不是可以这样理解,因为内存地址100这个地方我不不知道存的是什么(有可能是系统数据),怕损坏那里的数据, 所以不允许把数赋予指针变量,而0它不指向任何一个内存地址(空的),所以就可以把0赋予指针变量?!
顺便问一下, 当定义int *p; p=100;后系统编译时会报错吗? 我没试过(学C不久,在网上没找到合适的Turbo C),我想应该会报错吧?
请个位大虾指教! 谢谢!

JAY 发表于 2007-10-30 20:42:02

0和非0是不一样的
非0会造成非法访问,在编译期间“100”字面量的类型是int,而你的p的类型是int *,会报类型不匹配的错误。
如果你用(int *)100强制类型转换的话,类型虽然OK,不过编译器一般会阻止你这样做。
具体情况怎样由编译器决定了。

jason 发表于 2007-10-31 09:34:41

C語言中規定不能直接將地址賦給指針,不過具體編譯是否報錯就要看編譯器的實現了。
就如同瀏覽器的實現并不一定符合標準一樣。
不過自己寫代碼還是最好養成好習慣,按照標準來。定義完指針后養成賦值的好習慣,賦空值或者使其指向變量,以免野指針的存在,用完的指針記得賦空值

gameghost 发表于 2007-10-31 18:36:40

原帖由 520madi 于 2007-10-30 14:36 发表 http://www.emsky.net/bbs/images/common/back.gif
不允许把一个数赋予指针变量,故int *p; p=100;是错误的! 而在定义空指针时,把0赋予了指针变量#define NULL 0int *p=NULL; 这是为什么?

'0'在编译器中是一个特殊的符号,它没有固定的类型,或者可以看作是任何类型的集合,任何变量都可以被赋'0'.而非'0'的常数和变量都有固定的类型,所以会受到限制.

jason 发表于 2007-11-1 09:46:02

学校学习用还是tc,不过tc 2.0 DOS下的用着不习惯,用这个吧,同样是TC2.0的编译器,GUI的壳

leesoft 发表于 2007-11-1 14:49:06

#define NULL ((void*)0)

520madi 发表于 2007-11-2 15:49:22

原帖由 jason 于 2007-11-1 09:46 发表 http://emsky.net/bbs/images/common/back.gif
学校学习用还是tc,不过tc 2.0 DOS下的用着不习惯,用这个吧,同样是TC2.0的编译器,GUI的壳
谢谢你的东西,不过你有好用的TC2.0也上传吧。我收了!

520madi 发表于 2007-11-2 15:51:40

哦,对了!感谢以上大虾的解答! :)

jason 发表于 2007-11-2 16:46:44

tc已经没有好用的了,你用惯了图形界面,字符界面怎么都用不惯的……
tc从3.0开始就是C++了,只有2.0才是C。你就用tc for Windows 3.1吧,很好用的。

或者你直接转入学习win32平台C开发……选择就会很多了。入门还是TC吧

520madi 发表于 2007-11-2 17:23:30

哦! 谢了! 我现在看了各种C教材, 很少上机! 也不知道自己学得怎样!

jason 发表于 2007-11-2 22:48:10

多练,没有上机条件,可以在纸上写……在基本的语法懂了后,多看源码
页: [1]
查看完整版本: C语言的指针问题