1. 背景知识
1、字符串就是一个地址。
2. 指向字符串的指针
2.1 代码A
const char *a = "unix";
char *b = "hello";
pritnf("%s \n", a);
a = b;
printf("%s \n", b);
/**---------input----------**/
// unix
// hello
关于代码A中Line 1
疑问
- const 作用于下面那一个?
- 指针
a
- 指针
a
指向对象的值
- 指针
对比代码A中input,我们可以确定,const
修饰的声明中,a
的地址是可以被改变的。
2.2 代码B
当我们把代码A中的Line 5修改为*a = *b;
编译器给出错误提示:[Error] assignment of read-only location '*a'
中文意思是赋值给只读位置*a
,*a
就是a指向对象的值,所以 *a = *b
错误
2.3 结论
const char *a = "hello"
语句中const
修饰的是a
指针指向内存的值
3. 字符数组
3.1 代码C
char a[20] = "hello world";
char *b = "hello";
printf("%p = %s\n", a,a);
a[0] = 'a';
printf("%p = %s\n", a,a);
/**---------input----------**/
// hello world
// aello world
关于代码C中疑问
- 数组的元素和地址是否可以更改
- Line 1 : 字符数组可以对其元素进行更改
把代码C中Line 4 改成a = b
或 a = "hi"
都会出现错误提示: [Error] assignment to expression with array type
中文通俗意思:不可以赋值给具有数组类型的表达式。这里的表达式是指整个数组的首地址。
也就是说在C语言内部 数组的首地址是不可更改的,相当于被const
修饰
3.2 总结
数组的元素可以更改,而数组的首地址为只读
4. 拓展
在第二节中,讨论了const
对指针对象的作用,那么有没有办法让指针本身只读?
char *const a;
a = "hello";
printf("%p = %s\n", a,a);
上述代码会提示 [Error] assignment of read-of 'a'
中文意思为 错误:为只读的'a'赋值
所以,类型描述 *const 变量名
即可让指针变量为只读。
我愿以为博客园对makedown支持不是很好。没想到连目录都支持了。基本功能算是不错了。美中不足的代码块行数显示不了