const char *指向堆栈上的char数组

时间:2016-07-13 21:33:44

标签: c++ c

我写了这段代码

g.title('eta_n as a Function of Time', font=',18') failed.

代码已编译并成功运行。

我如何能够访问'const char * b'指向的内存并进行修改?这是否意味着共享内存const定义无关紧要?

谢谢

5 个答案:

答案 0 :(得分:6)

const char* b表示您无法通过 b将事件b修改为。但你可以通过其他方式修改它,只要事情不是const首先 *

这是一个简化的例子:

int a = 0;
const int* p = &a;
a = 42;  // OK! a is not const.
*p = 43; // ERROR! Cannot modify a through p.

const int b = 0;
p = &b;
b = 43;  // ERROR! b is const.

*这适用于C ++。 C

中的细节可能略有不同

答案 1 :(得分:2)

b类型const char *的声明意味着您无法使用指针b本身修改数据,它不会影响任何意义上的内存b

答案 2 :(得分:2)

char * p
p是指向非常量字符的非常量。我们可以使用p更改字符值,并将p更改为指向另一个字符。

char const * p
const char * p
p是指向常量字符的非常量指针。我们无法使用p更改字符值,但可以将p更改为指向其他字符。

char * const p
p是指向非常量字符的常量指针。我们可以使用p更改字符值,但无法将p更改为指向其他字符。

char const * const p
const char * const p
p是指向常量字符的常量指针。我们无法使用p更改字符值,也不能将p更改为指向其他字符。

在您的问题中,ab指向相同的记忆。 b声明为const char *,因此它是指向常量字符的非常量指针。这并不意味着任何其他人都无法修改角色。只有您无法使用b修改角色。

答案 3 :(得分:1)

const char * b只是意味着您无法通过b修改b指向的内容。它指向的地方是一个普通的记忆位置,并且可以被指向它的任何其他东西修改。

const表示的合约仅对const附加的变量或方法有效。

答案 4 :(得分:1)

  

我如何能够访问'const char* b'指向的内存并进行修改?

您可以访问b指向的内存,无论它是否被声明为

const char* b;

char* b;

您将无法通过b修改该值。以下是错误:

b[1] = 'E';
  

这是否意味着共享内存const定义无关紧要?

const限定符很重要 - 无论是否共享内存。你使用过:

const char a[] = "ABCD";
const char* b = a;

以下也是一个错误。

a[1] = 'E';