【问题标题】:What operation we can't do with pointers? [closed]我们不能用指针做什么操作? [关闭]
【发布时间】:2014-12-04 05:54:50
【问题描述】:

我知道这个问题听起来很奇怪,但你能说一些我们不能用指针做但用数组和其他的操作吗?

【问题讨论】:

  • 数组操作和指针操作是互为别名的,所以我觉得这个问题没有意义……
  • @keshlam 我也有同感,但这是我在顶级公司的面试问题:(
  • @ChumaAcc:我认为 Mohit 有他们想要的答案。
  • @keshlam 为了让事情在这里更清楚,我没有问这个问题;)

标签: c arrays pointers language-lawyer


【解决方案1】:

你不能合理使用sizeof

int arr[6] = {0};
int *p = &arr[0];

sizeof arr / sizeof arr[0] gives 6
sizeof p / sizeof p[0] may give 0, 1, 2 etc (1 on my 32 bit system)

如果数组是结构的成员,赋值运算符 (=) 将(深度)复制值。但是对于指针,只复制指针(浅)。

struct str
{
  char name[100];
  char *city;
}a, b;
...
a = b;
a.name[0] = '\0'; // b.name[0] does not change
a.city[0] = '\0'; // b.city[0] changed

【讨论】:

  • 你能简单解释一下深拷贝和浅拷贝吗?或者给我一些链接?
  • This post 很好地解释了深拷贝和浅拷贝。
  • Quib​​ble:您可以获取 sizeof(),但只能获取指针本身,而不是数组。但是,是的,这可能就是他们想要的。
  • 实际上,从这个角度来看,realloc() 和 free() 可能被认为是另一个区别......但这是一种误导,因为并非所有指针都可以安全地 free()d/realloc( )ed 或者,只有那些在 malloc()ed 内存块开始的地方。
【解决方案2】:

指针用于存储动态分配数组的地址以及作为参数传递给函数的数组。在其他情况下,数组和指针是两个不同的东西,

更多信息你可以看看这个网址 http://www.geeksforgeeks.org/difference-pointer-array-c/

【讨论】:

  • 我不太同意那里的结论。我能想到的数组名称和(有效)指针之间的 only 区别是空间是从 heap 还是 stack 分配的,以及 sizeof() 为它们报告的内容。它们的相似之处多于不同之处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多