百科问答小站 logo
百科问答小站 font logo



C语言中指针与数组都可以用a[3]表示,那它们是不是相同? 第1页

  

user avatar   pansz 网友的相关建议: 
      

取下标之后相同,不等于原来的东西就是相同了。

就好比一个 int funca(int a) 跟 int funcb(int b) 两个函数都返回 int,你能说这两个是相同的函数吗?

p[3] 的意思是 *(p+3)

a[3] 的意思是*(a+3)

两者确实是完全一致的。但这个取值只是某个下标指向的目标。 a 跟 p 本身并不等价。

简单的说:数组含有比指针更多的信息(比如数组长度),但数组在特定情况下会退化为指针。


似乎有部分同学对数组与指针依然存在争议。这里补充说明一下:

从数组那里可以获取数组的长度信息,但这仅仅是一个信息,你完全可以不使用它,或者无视它,所以数组确实允许下标越界。但是在编译器看来数组跟指针确实不同。

对指针来说,并不会含有长度信息,就算你想要用也没有,因此指针常常使用其它方式传递其中内容的长度。

如果忽略数组的长度信息,确实可以把数组当作指针使用,但这并不意味着两者没有区别,它的长度信息至少在编译阶段是客观存在的。




  

相关话题

  c++如此繁琐,为什么大学不直接开展python课程? 
  同样用pow()表示10^2,为什么分别用字面量和变量作参数会返回不同的值? 
  libevent+rabbitmq 架构做高并发服务器可否? 
  在C++中,为什么部分程序员喜欢在循环中写‘++i’而不是‘i++’? 
  还有哪些像 Unix,C/C++ 一样经久耐用的软件技术? 
  有没有必要让 12 岁孩子学 C++? 
  如果有一个按钮按下,世界上所有的c,c++,c#语言代码都无效,我们的生活会发生什么? 
  有一台不会坏掉的电脑,这台电脑上只有vc++6.0,给一个人一亿年的时间,能创造出现在的各种软件吗? 
  如何评价C语言让数组退化为指针的设计? 
  <<深度探索c++对象模型>>中的虚继承看着蛋疼,感觉这在实际中也没多大用,需要继续深究吗? 

前一个讨论
用二十发二战鱼雷可以击沉现代几十万吨的油轮吗?
下一个讨论
c++的list什么时候用?





© 2025-02-16 - tinynew.org. All Rights Reserved.
© 2025-02-16 - tinynew.org. 保留所有权利