相关疑难解决方法(0)

对于数组,为什么a [5] == 5 [a]?

正如Joel在Stack Overflow播客#34中用C编程语言(又名:K&R)所指出的那样,在C中提到了数组的这种属性:a[5] == 5[a]

乔尔说,这是因为指针运算,但我仍然不明白.为什么a[5] == 5[a]

c arrays pointers pointer-arithmetic

1567
推荐指数
16
解决办法
9万
查看次数

指针是否支持“数组样式索引”?

(常见问题解答-此问题不断出现)

我假设读者知道指针算法是如何工作的。

int arr[3] = {1,2,3};
int* ptr = arr;
...
*(ptr + i) = value;
Run Code Online (Sandbox Code Playgroud)

老师/ C书籍不断告诉我,我不应该*(ptr + i)像上面的示例那样使用,因为“指针支持数组样式索引”,而我应该使用它ptr[i] = value;。那里没有论据-更容易阅读。

但是从C标准来看,我什么都没有找到,叫做“数组样式索引”。实际上,运算符[]并不期望任何一个操作数都是数组,而是指针或整数!

6.5.2.1数组下标

约束条件

其中一个表达式的类型应为“完成对象类型的指针”,另一个表达式的类型应为整数,结果的类型应为“ type ”。

为什么数组下标运算符不期望数组?标准错了吗?我的老师/ C书困惑了吗?

c arrays pointer-arithmetic subscript-operator array-indexing

5
推荐指数
1
解决办法
111
查看次数

方括号如何在C中起作用?

我刚开始使用C而且我正在尝试理解基础知识.大量的教程会告诉你一些事情并让你相信它没有任何真正的解释,并且没有任何答案,我发现它是人类可读的.

在下面的:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int *a;

  a = malloc(5 * sizeof(int));

  a[2] = 4;

  printf("%d\n", a[0]); // Prints 0
  printf("%d\n", a[2]); // Prints 4

  return 0;
} 
Run Code Online (Sandbox Code Playgroud)

我没有显式声明int *a为数组的指针,但如果我分配一些内存,我可以使用,a就像我已经将它声明为一个数组.声明带方括号的指针只是我在下面所做的快捷方式吗?方括号实际上做了一些指针运算吗?

厚脸皮第二个问题

为什么内存地址分配给a*a

c arrays malloc pointers

1
推荐指数
3
解决办法
1万
查看次数