游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8365|回复: 31

揭下指针的“假面剧”,好多年后突然明白了指针了&q

[复制链接]

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2006-4-24 23:43:00 | 显示全部楼层 |阅读模式
C++中的指针,可以说是让人爱恨交加。因为指针,使得C++强大而灵活;同样是因为指针,使得C++相比其他语言,对新手来说简直是噩梦。相信我的这番话每一个走过来的C++程序员都有同感。

指针是什么东西呢?

int nNum = 10;
int* p_int = & nNum;

double d = 8.7765;
double* p_double = &d;


p_int, p_double 就是我们所说的指针,那么她到底是什么东西呢?

关键就是指针在声明的时候 int* 和 double* 把人胡悠住了。其实不管是什么类型的指针其实本质就是一个长度为4个字节的长整型变量( long int )。不管这个指针是所谓的char型r,int型还是double,float或是自定义的类型等等,本质都是一个长整数,比如 0012F574 。如果你对我说的有疑虑,你可以用sizeof(指针)试一试,不管什么类型的指针,都是4个字节。


其实,我觉得如果C++这样规定指针的定义话,那就好明白多了, 不管什么类型,因为指针本质就是一个长整形数值,所以应该用:

int nNum = 10;
long p_int = & nNum;

double d = 8.7765;
long p_double = &d;


所以,指针的本质就是:指针其实就是一个长整型变量(long int) ,无论哪种数据类型,她们的指针都一样,都是一个长度为4个字节的长整型变量,里面存放的是一个内存地址。

---------------

本人对程序理解还尚浅,如有错误的地方还请各位大侠指教!




86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2006-4-25 05:42:00 | 显示全部楼层

Re:揭下指针的“假面剧”,好多年后突然明白了指针了&qu

是可以把指针做变量理解,的确就是个记录地址的变量。但是不是一个长整型变量,应该和所在平台寻址方式有关。
不同数据类型的指针,其实还是有很大不同的,主要反映在指针的步进长度上,如下例子:

  1. #include <iostream>

  2. int main(void)
  3. {
  4.     char* str = "Hello World!";
  5.     int* istr;
  6.     istr = (int*)str;
  7.     std::cout << str << std::endl;
  8.     std::cout << "The frist letter is: " << (*str) << std::endl;
  9.     std::cout << "The second letter is: " << (*(str+1)) << std::endl;
  10.     std::cout << std::endl;
  11.     std::cout << "RUN: \"std::cout << (char*)(istr+1) << std::endl;\"" << std::endl;
  12.     std::cout << "OUTPUT: " << (char*)(istr+1) << std::endl;
  13.     return 0;
  14. }
复制代码


“str+1 ”只步进了1个字节
而“istr+1”步进了4个字节

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
 楼主| 发表于 2006-4-25 08:34:00 | 显示全部楼层

Re:揭下指针的“假面剧”,好多年后突然明白了指针了&qu

是可以把指针做变量理解,的确就是个记录地址的变量。但是不是一个长整型变量,应该和所在平台寻址方式有关。
-----------------------

大家一般多是在W32平台下进行编程,所以这里说的就是W32平台,所以当然是一个long int 变量了,呵呵!

3

主题

72

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2006-4-25 09:22:00 | 显示全部楼层

Re:揭下指针的“假面剧”,好多年后突然明白了指针了&qu

........

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2006-4-25 10:39:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

46

主题

281

帖子

313

积分

中级会员

Rank: 3Rank: 3

积分
313
QQ
发表于 2006-4-25 12:35:00 | 显示全部楼层

Re:揭下指针的“假面剧”,好多年后突然明白了指针了&qu

……

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-4-25 12:43:00 | 显示全部楼层

Re:揭下指针的“假面剧”,好多年后突然明白了指针了&qu

.....

32

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2006-4-25 13:01:00 | 显示全部楼层

Re:揭下指针的“假面剧”,好多年后突然明白了指针了&qu

好多年后突然明白.......................
我无语了

38

主题

275

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2006-4-25 13:11:00 | 显示全部楼层

Re:揭下指针的“假面剧”,好多年后突然明白了指针了&qu

  起个这样的题目,结果是这样的内容-----无语!  ---好多年后--更无语!

7

主题

44

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2006-4-25 14:04:00 | 显示全部楼层

Re: Re:揭下指针的“假面剧”,好多年后突然明白了指针

kevinlynx: Re:揭下指针的“假面剧”,好多年后突然明白了指针了"丑陋"本质。

  起个这样的题目,结果是这样的内容-----无语!  ---好多年后--更无语!

同感 [em23]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 08:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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