相关疑难解决方法(0)

指向数组c ++的指针

以下代码在做什么?

int g[] = {9,8};
int (*j) = g;
Run Code Online (Sandbox Code Playgroud)

从我的理解,它创建一个指向2个int数组的指针.但是为什么这会起作用:

int x = j[0];
Run Code Online (Sandbox Code Playgroud)

这不起作用:

int x = (*j)[0];
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers

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

静态和动态数组之间的区别

朋友我刚刚玩了一些指针程序,并意识到GCC(可能是C标准)区分静态和动态数组.

动态数组具有用于数组中元素地址的占位符,而对于静态数组,没有存储器位置,其中编译器存储元素数组的起始地址.

我有一个示例程序来证明我的困惑.

#include <iostream>
#int main(void)
{
  int _static[10];
  int *_dynamic;

  _dynamic = new int [10];

  std::cout<<"_static="<<_static<<" &_static="<<&_static<<" &_static[0]="<<&_static[0]<<std::endl;
  std::cout<<"_dynamic="<<_dynamic<<" &_dynamic="<<&_dynamic<<" &_dynamic[0]="<<&_dynamic[0]<<std::endl;

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

对于上面的程序,_static并&_static[0]在预期的行上返回相同的地址.但是,&_static也返回与其他两个相同的地址.

所以,_static并&_static参考相同的数字(或地址,无论我们想称之为什么).正如所料,_dynamic并&_dynamic指出不同的位置.

那么,为什么C标准会说_static并且&_static必须引用相同的位置.这听起来令人困惑.我觉得的一个原因是&_static没有多大意义.但那么它的使用不应该被报告为错误吗?

有人可以帮我解决这个困惑吗?

c c++ compiler-construction gcc icc

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

标签 统计

c++ ×2

arrays ×1

c ×1

compiler-construction ×1

gcc ×1

icc ×1

pointers ×1