By: Ailson Jack
Date: 2022.12.04
个人博客:http://www.only2fire.com/
本文在我博客的地址是:http://www.only2fire.com/archives/150.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。
1、const char *ptr
const char *ptr
表示的是指向常量的指针,不能通过该指针去修改指针所指向地址中的内容,但是可以修改该指针的指向。 可以通过其他普通指针对同样地址中的数据进行修改,测试例子如下:
/**
* @file test.c
* @author Ailson Jack (jackailson@foxmail.com)
* @brief
* @version 1.0
* @date 2022-12-04
*
* @copyright Copyright (c) 2022
*
*/
#include <stdio.h>
int main(void)
{
char str[] = "Hello World!";
char name[] = "Ailson Jack";
const char *ptr = str;
char *ptr_tmp = str;
// 修改指针所指向地址中的内容
printf("old str:%s\r\n", str);
ptr[0] = 'A'; // 编译报错,不能通过该指针去修改指针所指向地址中的内容
ptr_tmp[0] = 'J'; // 其他普通指针对同样地址中的数据进行修改
printf("new str:%s\r\n", str);
// 修改指针的指向
printf("old ptr:%s\r\n", ptr);
ptr = name; // 可以修改该指针的指向
printf("new ptr:%s\r\n", ptr);
return 0;
}
编译测试程序:
gcc test.c -o test.exe
gcc编译报错,提示对指向常量的指针的错误操作。
屏蔽23行的代码 ptr[0] = 'A';
,重新编译,运行结果如下:
2、char const *ptr
char const *ptr
和 const char *ptr
等价。
3、char * const ptr
**char * const ptr
表示的是指针的指向不可以被修改,但是可以修改指针指向地址中的内容。**测试例子如下:
/**
* @file test.c
* @author Ailson Jack (jackailson@foxmail.com)
* @brief
* @version 1.0
* @date 2022-12-04
*
* @copyright Copyright (c) 2022
*
*/
#include <stdio.h>
int main(void)
{
char str[] = "Hello World!";
char name[] = "Ailson Jack";
char * const ptr = str;
// 修改指针所指向地址中的内容
printf("old str:%s\r\n", str);
ptr[0] = 'A'; // 可以修改指针指向地址中的内容
printf("new str:%s\r\n", str);
// 修改指针的指向
printf("old ptr:%s\r\n", ptr);
ptr = name; // 编译报错,指针的指向不可以被修改
printf("new ptr:%s\r\n", ptr);
return 0;
}
编译测试程序:
gcc test.c -o test.exe
gcc编译报错,提示指针的指向不可以被修改。
屏蔽27行的代码 ptr = name;
,重新编译,运行结果如下:
4、总结
const char *ptr
表示的是指向常量的指针,不能通过该指针去修改指针所指向地址中的内容,但是可以修改该指针的指向。
char const *ptr
和 const char *ptr
等价。
char * const ptr
表示的是指针的指向不可以被修改,但是可以修改指针指向地址中的内容。
const放在*号前表示修饰的是指针指向的对象,const放在*号后表示修饰的是指针本身。
根据上面章节的内容,下面的写法是什么意思应该比较简单吧:
const char * const ptr;
表示的是ptr指针的指向不可以被修改,ptr指针所指向地址中的内容不可以被修改。
欢迎关注博主的公众号呀(微信搜索公众号:嵌入式那些事),可以扫描下面的公众号二维码(为防止公众号二维码被CSDN处理掉,二维码图片周围加了些东西,如果公众号图片真被CSDN处理了,也可以直接访问我的个人博客文章获取公众号二维码图片):
如果文中有什么问题欢迎指正,毕竟博主的水平有限。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。
排版更好的内容见我博客的地址:http://www.only2fire.com/archives/150.html
注:转载请注明出处,谢谢!^_^