M.O*_*.O. 4 c memory pointers c-strings
下面是根据"标准C库,strlen.c的实现,
size_t strlen(const char *s){
const char *sc;
for(sc = s; *sc != '\0'; ++sc)
return (sc-s); }
Run Code Online (Sandbox Code Playgroud)
我对合法性的理解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";
Run Code Online (Sandbox Code Playgroud)
它完全合法
foo = bar;
Run Code Online (Sandbox Code Playgroud)
现在都指向"世界"
它也是合法的
const char *myPtr = bar;
myPtr = foo;
Run Code Online (Sandbox Code Playgroud)
您不允许做的是更改实际的数据内存,以免您被允许这样做
foo[0] = 'J';
Run Code Online (Sandbox Code Playgroud)