const char arr = “123”;
char brr = “123”;
const char crr[] = “123”;
char drr[] = “123”;
这四个语句的区别:
arr与brr中的字符串保存在常量区,均不可更改,若使用brr更改数据,会产生段错误。在编译时会对brr提出警告warning: deprecated conversion from string constant to ‘char*’
crr与drr均分配在栈区(全局变量则在数据区与常量区),可以通过drr更改数据,某些编译器会编译优化将crr分配到常量区。
指针与数组的区别
| 指针 | 数组 |
|---|---|
| 保存数据的地址 | 保存数据 |
| 间接访问数据,首先获得指针的内容,然后将其作为地址,从该地址中提取数据 | 直接访问数据, |
| 通常用于动态的数据结构 | 通常用于固定数目且数据类型相同的元素 |
| 通过Malloc分配内存,free释放内存 | 隐式的分配和删除 |
| 通常指向匿名数据,操作匿名函数 | 自身即为数据名 |
