C语言指针与const详解

需积分: 0 0 下载量 38 浏览量 更新于2024-08-04 收藏 39KB DOCX 举报
"C语言基础知识,包括指针比较和const关键字的使用" 在C语言中,指针是一个非常重要的概念,它允许我们直接操作内存地址。在给定的内容中,提到了不同类型的指针和字符数组之间的比较。首先,我们要明白,字符数组和指针在内存中的处理方式是不同的。 当我们在程序中声明`char str1[]="abc"`和`char str2[]="abc"`时,实际上创建了两个不同的数组,它们各自在栈内存中分配空间并存储字符串"abc"。由于它们是不同的内存区域,即使内容相同,比较`str1`和`str2`时会得到0,表示它们不相等。 而对于`char*str5="abc"`和`char*str6="abc"`这样的指针,它们分别指向存储在数据区的同一字符串常量"abc"。因此,比较`str5`和`str6`会得到1,表示它们指向同一个内存地址,即相等。 接下来,我们讨论`const`关键字。`const`用于声明常量,它可以修饰变量、函数参数和返回类型,以及指针。在声明`const int a`或`int const a`时,都意味着`a`是一个不可修改的整型变量,赋值后不能再改变其值。 例如: ```c const int a = 0; // 正确 a = 1; // 错误,a是只读的 ``` 对于`const`修饰指针的情况,有以下几种形式: 1. `char*const p1`: 指针`p1`是常量,它的值(即指向的内存地址)不可变,但可以修改`p1`指向的变量。 2. `char const *p2`: `p2`可以改变,但`p2`所指的变量是常量,不能修改。 3. `const char *p3`: 同`p2`,`p3`所指的字符是常量,不能修改。 4. `const char *const p4`: 既是常量指针,又是指针常量,`p4`和`p4`指向的字符都不能改变。 例如: ```c char a = 'a'; char*const p1 = &a; // 正确,p1初始化时必须赋值 (*p1)++; // 正确,可以修改p1指向的值 char const *p2; // 可以不立即初始化 p2 = &a; (*p2)++; // 错误,不能修改p2指向的值 ``` 理解`const`的关键在于确定`const`修饰的是指针本身还是指针所指向的变量。在实际编程中,`const`能够帮助我们编写更安全、更易于理解的代码,防止不必要的修改和错误。