c - 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 都指向的位置是合法的,但任何分配(或引用?)*s
或sc
将是非法的。
解决方案
我认为您要问的是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';
推荐阅读
- django - 从 ManyToManyField 填充 MultipleChoiceField 值
- python - 如何在同一行打印这些字符?
- python - 将单词传递给函数
- c# - `Clicked` 和 `Command` 在同一个 Xamarin 视图上使用时如何工作?
- laravel - 如何将 PHPMailer 连接转换为 Laravel .env?
- excel - PowerShell - Import Excel then Export CSV without using Excel or COM
- machine-learning - 通过了解一些未来事件来增强预测
- javascript - 从 JSON 响应中删除属性
- mysql - 在这种情况下如何对 COUNT() 求和
- python-3.x - 在多个键上合并 pandas ojn 2 数据帧