C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了将const指针定义为const字符串大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
乌尔里希·德雷珀(Ulrich Drepper)的醉酒,看到两个看似令人困惑的参赛作品.

first one(全球空间中的字符串)中,Ulrich声明该字符串应定义为:

const char _pcre_ucp_names[] = "blabla";

然已经在second one(函数中的字符串),他认为应该声明为:

static const char _pcre_ucp_names[] = "blabla";

你能解释什么是更好的@L_772_3@来解析一个字符串?

UDP:

首先,我删除了C标签 – 这个问题对C和C都有效.所以我认为答案不能解释类/函数/文件范围中的静态意义是否相关.

在回答之前阅读文章.文章涉及内存使用 – 存储实际数据(在.rodata或.data部分),字符串应该重新定位(如果我们谈论unix / linux共享对象),是否可以更改字符串与否.

UDP2
在第一个中,它表示对于全局变量的形式:

(1) const char *a = "...";

不太好

(2) const char a[] = "..."

为什么?我一直认为(1)更好,因为(2)实际上复制了我们分配它的字符串,而(1)只指向我们分配的字符串.

解决方法

这取决于 – 如果您需要字符串对项目中的其他源文件可见,则不能将其声明为静态.如果您只需要从定义它的文件中访问它,那么您可能想要使用静态.

你提到的博客文章是在谈论不同的东西:

#include <stdio.h>
#include <String.h>
int main(void)
{
  const char s[] = "Hello"; /* Notice this variable is inside a function */
  strcpy (s,"bye");
  puts (s);
  return 0;
}

在这种情况下,静态意味着不同的东西:这会创建一个变量,该变量在对同一函数的多次调用中持续存在.他的另一个例子显示一个函数之外的全局变量.

编辑:

为了澄清,既然你编辑了你的问题,你不想使用const char * a =“String”的原因是你创建了一个额外的可写指针.这意味着,然您无法更改字符串的字符,但您仍然可以使指针指向完全​​不同的字符串.见下文:

const char *Hello = "Hello";

int main( int argc,char const *argv[] )
{
    Hello = "goodbye";
    puts(Hello);
    return 0;
}

该示例编译并运行.如果Hello应该是常量,那肯定不是你想要的.当然,你也可以写下这个来解决这个问题:

const char * const Hello = "Hello";

你仍然有两个变量你只需要一个Hello是一个指向字符串常量的指针,如果它是一个数组,那么就没有那个额外的指针.

大佬总结

以上是大佬教程为你收集整理的将const指针定义为const字符串全部内容,希望文章能够帮你解决将const指针定义为const字符串所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。