广告合作QQ:5818374
您好,欢迎访问第一财经直播
  • 关键词不能为空

财经资讯

第一财经直播 > 财经资讯 > 国际期货喊单直播_c270005基金净值onst在 C 与 C 中的区别_非农数据

国际期货喊单直播_c270005基金净值onst在 C 与 C 中的区别_非农数据

网络
非农数据网提供美国非农数据公布时间、公布网站、历史数据查询。为贵金属投资者提供非农数据资讯,非农数据直播,非农数据对黄金白银原油价格影响解读。 c270005基金净值onst在 C 与
非农数据网提供美国非农数据公布时间、公布网站、历史数据查询。为贵金属投资者提供非农数据资讯,非农数据直播,非农数据对黄金白银原油价格影响解读。

c270005基金净值onst在 C 与 C 中的区别

  1、C语言中全局const变量会存储到只读数据段,C 中全局const变量声明为extern或者对变量取地址时,编译器会分配内存,变量存储在只读数据段。两个都受到了只读数据段的保护,不可修改。

  const int constA=100;

  int main()

  {

  int* p=(int*)&(constA);

  *p=200;

  return 0;

  }

  运行结果:

  以上代码在C/C 中均编译通过,但是在运行期修改constA的值时,发生写入错误,原因是修改只读数据段的数据。

  2、C语言中局部const存储在堆栈区,只是不能通过变量直接修改const只读变量的值,但是可以跳过编译器的检查,通过指针间接修改const的值。

  int main()

  {

  const int constA=100;

  int* p=(int*)&(constA);

  printf("constA=%dn", constA);

  *p=200;

  printf("*p=%dn", *p);

  return 0;

  }

  运行结果:

  3、C 中的局部const变量:对于基础数据类型,即int、double等,编译器会将它放到符号表中,不分配内存,当对其取地址时,会分配内存。

  int main()

  {

  const int constA=100;

  int* p=(int*)&(constA);

  *p=200;

  cout << "constA=" << constA << endl;

  cout << "*p=" << *p << endl;

  return 0;

  }

  运行结果:

  constA在符号表中,当对constA取地址,这个时候为constA分配了新的空间,* p操作的是分配的空间,而constA是从符号表中获取的值。如果用一个变量初始化一个const基础数据类型变量,那么也会给这个const变量分配内存空间,可以通过指针修改其值。

  int main()

  {

  int b=100;

  const int constA=b;

  int* p=(int*)&(constA);

  *p=200;

  cout << "constA=" << constA << endl;

  cout << "*p=" << *p << endl;

  return 0;

  }

  运行结果:

  自定义数据类型的const变量,例如类对象,也会分配内存,可以通过指针间接修改数据成员的值。

  class Person

  {

  public:

  int age;

  string name;

  };

  int main()

  {

  const Person person; //未初始化age

  // person.age=20; // 无法修改

  Person* pPerson=(Person*)&person;

  pPerson->age=100; // 指针间接修改

  cout << "pPerson->age:" << pPerson->age << endl;

  return 0;

  }

  运行结果:

  const由C 采用,并加进标准C中。在C语言中const默认为外部连接,C 中const默认为内部连接。当C语言中两个文件中有同名const变量时,编译器会报重复定义,在C 中就不会。若想让C 中的const成为外部连接,必须用extern显式声明。

A股女090001基金净值董事长被捕引爆34亿巨雷 有人找京东算账

相关阅读

与本文更多相关文章

关键词不能为空
股票配资直播室
股票配资直播室
智能产品

家用扫地车产品推荐