标题:C语言 指针变量部分好难理解,求高手指导下怎么学,这部分用处大吗
只看楼主
LCDW
Rank: 1
等 级:新手上路
帖 子:18
专家分:3
注 册:2015-1-23
结帖率:66.67%
已结贴  问题点数:10 回复次数:17 
C语言 指针变量部分好难理解,求高手指导下怎么学,这部分用处大吗
如题
搜索更多相关主题的帖子: 怎么学 C语言 
2015-01-30 15:43
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:1 
精华部分,没有指针的C就是废的

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2015-01-30 15:46
LCDW
Rank: 1
等 级:新手上路
帖 子:18
专家分:3
注 册:2015-1-23
得分:0 
以下是引用waterstar在2015-1-30 15:46:20的发言:

精华部分,没有指针的C就是废的
指针部分太难理解了,有没有学习的技巧? 望不吝赐教
2015-01-30 15:51
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:0 
回复 3楼 LCDW
好像有本书叫“C和指针”

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2015-01-30 16:01
LCDW
Rank: 1
等 级:新手上路
帖 子:18
专家分:3
注 册:2015-1-23
得分:0 
以下是引用waterstar在2015-1-30 16:01:09的发言:

好像有本书叫“C和指针”
指针成拦路虎了,
   看来得下点功夫好好钻研
2015-01-30 16:09
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
得分:1 
一开始几乎每个人都这样,因为容易被绕晕。首先楼主得记住指针就是一种变量,一种用来存储变量地址的变量。找本好书,多写代码,其它只能靠你自己了。

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-01-30 16:18
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:1 
回复 楼主 LCDW
指针不难理解,但指针的灵活运用是比较难的,其次就是c优先级规则有些拗口,这会导致有些写的很牛的指针相关代码难以看懂。其实很多其他语言已经完全抛弃指针,通过安全的专用函数一样可以随意操作内存了。
如果你能理解普通变量编译后对应内存里的一个明确存储空间、不同类型占用空间大小不同的话,你就应该可以理解指针变量也像普通变量一样,也对应内存里一个明确的存储空间,不同的地方有三点:1是指针变量占用的空间大小固定,等于你cpu地址线所占用的字节数,如16位系统2字节、32位系统4字节、64位系统8字节(据说已经有128位的cpu问世了);2是指针变量可以通过*运算符获取指针变量值所指向的地址空间处的值,即可把普通变量的地址赋给指针变量;3是普通数值类型的变量或常数可以作为指针的偏移量使指针指向不同内存地址,这就是指针的精髓之所在。

能编个毛线衣吗?
2015-01-30 16:40
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
得分:1 
如果不喜欢指针,你可以用int型变量来存储地址。

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2015-01-30 16:54
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
回复 8楼 young
这可以吗?给一个可以编译成功的代码让我学学好不。
这应该不符合c语法的,甚至不同类型的指针都不能赋值,如:int a;char *p;p=&a,这是非法的,尽管是给地址到指针变量。早期的int变量是16位,根本容不下32位的指针值。当然可以通过一定的手段让int变量存储地址值的。

能编个毛线衣吗?
2015-01-30 18:04
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
得分:0 
回复 9楼 wmf2014
就是使用数据类型强制转换,反正就是存储个地址。
    int data =100;
    unsigned int data_addr;

    data_addr = (unsigned int)(&data);

    printf("data_add=0x%x,  data=%d \n", data_addr , *((int*)data_addr) );

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2015-01-30 20:51



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




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

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