首页 > 解决方案 > strlen函数的理解——const char *s到const char *sc的赋值

问题描述

下面是 strlen.c 根据“标准 C 库,

size_t strlen(const char *s){
   const char *sc;
   for(sc = s; *sc != '\0'; ++sc)

   return (sc-s);  }

我对合法性的理解是否sc = s正确?

sc=s是一个合法的赋值,因为因为两个变量都被声明为const,所以它们都保护了 s 所指向的对象。在这种情况下,更改 sc 或 s 都指向的位置是合法的,但任何分配(或引用?)*ssc将是非法的。

标签: cpointersmemoryc-strings

解决方案


我认为您要问的是const关键字的含义。如果不是,请澄清您的问题。

我想它的方式是任何 const 变量都可以存储在 ROM(只读存储器)中,而未声明为 const 的变量可以存储在 RAM(随机存取存储器)中。这种类型取决于您正在使用的计算机类型,因此 const 数据实际上可能不会存储在 ROM 中,但它可能是。

所以你可以用指针本身做任何你想做的事情,但你不能改变它指向的内存中的数据。

这意味着您可以引用指针并随心所欲地传递它。您也可以为指针分配不同的值。

假设您有此代码

const char* foo = "hello";
const char* bar = "world";

这样做是完全合法的

foo = bar;

现在都指向“世界”

这样做也是合法的

const char *myPtr = bar;
myPtr = foo;

你不能做的是改变实际的数据内存所以你不能做

foo[0] = 'J';

推荐阅读