指针指针指针 关于c中指针问题!!

micro_sun 2008-04-18 01:17:53
若T为指针变量,指向某一内存区域首地址,那么T[1],T[2]表示什么?

还有 按书上所说,T+1表示地址计算 结果为T+1*c(c表示T所指的变量所占字节数),那么T+1*c这个地址在内存中到底是哪儿呢,如何确定的,内存中每一处都是有固定地址(比如某个编号)的吗 还是内存中的地址编号是按物理位置连续分布的??



小弟初学指针,还望大虾不吝赐教~
...全文
89 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
micro_sun 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 meiZiNick 的回复:]
没遇到过这种情况.
[/Quote] 怎么没遇到? 严蔚敏老师的数据结构里光这种情况。。由于想考研所以在学数据结构,,不过最近又不是很有考研的激情了,所以最近学JAVA多些。。。。再次谢谢各位的指教^_^
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
没遇到过这种情况.
matrixdwy 2008-04-20
  • 打赏
  • 举报
回复
int *T;
int c = 3;
T = &c;

*T就是3
T[0]也是3;
T[1]是c的后面第4个字节处的地址的值,一般来说是垃圾,因为这个地址还没有被使用,只是一堆没有用的01的组合,但是T[1]仍然可以根据这些01来“翻译”成为一个整型数值,这个数值是没有意义的。

在说的明确点,比如 &c = 00001234 (这个不是正确的内存地址格式,只是为了方便起见才举了这么个例子)
那么T指向的就是 00001234
&T[1] 就是 00001238 T[1]的值是00001238~00001241(4个字节,因为int占4字节)这段范围里面的01组合所“翻译”出来的整型值
&T[2] 就是 00001242 T[2]的值是00001242~00001245(4个字节,因为int占4字节)这段范围里面的01组合所“翻译”出来的整型值

shuangwen163 2008-04-20
  • 打赏
  • 举报
回复
指针我也不是很懂
aayzaayz 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 flyingpig4945 的回复:]
举个例子,楼主且看:
int a[3] = {1, 2, 3};
int *p = a;
p[0] == a[0] == 1;
p[1] == a[1] == 2;
...
p[n]为自p开始偏移量为n * sizeof (int)地址的变量
偏移量和T的“原始类型”(如T为int *,则为int;若T为char *,则为char)的sizeof、n有关

明白否?

另:我想分数的多少不是有没有人回答的原因。
[/Quote]

p+1 = & (p[1])

P+2 = &(P[2])

*(p+1) = a[1] = p[1]
flyingpig4945 2008-04-20
  • 打赏
  • 举报
回复
Lstyk讲的比偶规范……学习一下:-)
flyingpig4945 2008-04-20
  • 打赏
  • 举报
回复
举个例子,楼主且看:
int a[3] = {1, 2, 3};
int *p = a;
p[0] == a[0] == 1;
p[1] == a[1] == 2;
...
p[n]为自p开始偏移量为n * sizeof (int)地址的变量
偏移量和T的“原始类型”(如T为int *,则为int;若T为char *,则为char)的sizeof、n有关

明白否?

另:我想分数的多少不是有没有人回答的原因。
Lstyk 2008-04-20
  • 打赏
  • 举报
回复
T[1] = *(T + 1),解引用T+1所指向的变量
T[n] = *(T + n),
&T[1] = T + 1, &T[n] = T + n,

“内存中每一处都是有固定地址(比如某个编号)的吗 还是内存中的地址编号是按物理位置连续分布的?”
这个问题现在我也不知道。
T + n所指向的地址是指从T所指向的地址向后移动了n * sizeof(*T)个字节,
至于是向内存高地址方向移动还是向低地址方向移动,不同种类的机器可能不一样。
micro_sun 2008-04-20
  • 打赏
  • 举报
回复
2楼的,为什么是(char*)T?强制转换为 指向CHAR型的指针 是指什么
micro_sun 2008-04-20
  • 打赏
  • 举报
回复
T是指针啊,sizeof(T)是多少呢,是T所指的变量占的空间吗?

SORRY啊,现在手头较紧,所以分不多,还望见谅
icoding 2008-04-18
  • 打赏
  • 举报
回复
T[1] == (char*)T+(sizeof(T)*1)
T[2] == (char*)T+(sizeof(T)*2)
lyserver 2008-04-18
  • 打赏
  • 举报
回复
分太少了,一般是没有人愿回答的。
简单说一下吧,T是内存中的一个地址,这个地址可以是物理地址,也可以是逻辑地址,视实际情况而定。
T+1*sizeof(T)表示是在T的地址是偏移sizeof(t)个字节。
T[0]的地址与T的地址一样,T[1]则与T+1*sizeof(T)一样,T[2]则与T+2*sizeof(T)一样。

64,690

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧