C语言---char *与const char *
一、const char和char
const char*的类型是:“指向一个具有const限定符的char类型的指针”。(不能修改其值)
char*的类型是:“指向一个char类型的指针”。
因此const char和char都是指向char类型的指针,只不过const char*指向的char类型是const的。
因此对于代码:
char* src;
const char* dest ;
dest = src;
这样赋值是正确的,因为:
- 操作数指向的都是char类型,因此是相容的
- 左操作数具有有操作数所指向类型的全部限定符(右操作数没有限定符),同时自己有限定符(const)
如果反过来赋值就违反了赋值的约束条件:src指向的对象的值可以修改,而dest指向的对象的值不可修改
如果让src去指向dest所指向的那个不可修改的对象,如果合法,岂不是变得可修改了?
src = dest; // 这样赋值,左操作数指向的类型没有右操作数指向类型的const限定符,不符合约束条件2
二、MS-RTOS代码演示
函数声明:
/*** @brief Get the name of a specified process.** @note Cannot be called in the interrupt environment* @note Cannot be called in kernel lock environment** @param[in] pid Process id* @param[out] name Process name buffer* @param[in] len Process name buffer length(MUST >= MS_KERN_OBJ_NAME_SIZE)** @return Error number*/
ms_err_t ms_process_name(ms_pid_t pid, char *name, ms_size_t len);/*** @brief Search a process by name.** @param[in] name The name of process* @param[out] pid Process id** @return Error number*/
ms_err_t ms_process_find(const char *name, ms_pid_t *pid);
代码实例:
#include <ms_rtos.h>int main (int argc, char **argv)
{ms_pid_t pid;ms_pid_t *fpid;char buf[MS_KERN_OBJ_NAME_SIZE];char *name;const char *find_name;pid = ms_process_self();ms_printf("process id is %d\n", pid);ms_process_name(pid, buf, MS_KERN_OBJ_NAME_SIZE);name = buf;ms_printf("process name is %s\n", name);fpid = &pid;find_name = name;ms_printf("find the process which name is %s pid is %d\n", find_name, *fpid);int ret = ms_process_find(find_name, fpid);if(ret >= 0) {ms_printf("find the process sucessful!\n");} else {ms_printf("fail to find the process!\n");}return (0);
}
C语言---char *与const char *相关推荐
- char* 赋值 const char* 释放_嵌入式Linux开发《C语言专题(十:彻底搞懂“关键字”const)》...
C语言中的关键字总共有32个:auto break case char const continue default do double else enum extern float for goto ...
- (C语言)写一个函数,实现两个字符串的比较, 即自己写一个strcmp函数,函数原型为int strcmp(const char* p1, const char* p2)
写一个函数,实现两个字符串的比较, 即自己写一个strcmp函数,函数原型为int strcmp(const char* p1, const char* p2);设p1指向字符串s1,p2指向字符串s ...
- C++ 字符串、string、char *、char[]、const char*的转换和区别
1.字符串 字符串本质就是一串字符,在C++中大家想到字符串往往第一反应是std::string(后面简称string) 字符串得从C语言说起,string其实是个类,C语言是没有class的,所以C ...
- 【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 Visual Studio 2019 中编译 Android NDK , 构建方式参考 [Android 逆向]Android 进程注入工具开发 ...
- mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’
编译FAAC-1.28时遇到错误: mpeg4ip.h:126: error: new declaration 'char* strcasestr(const char*, const char*)' ...
- Bazel5.0.0源码安装报错:no matching function for call to ‘StrFormat(const char [28], const char*)’
背景介绍 在红帽 源码安装Bazel时,执行指令: env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk --tool_java_runtime_ ...
- 写一个strncpy(char *dest, const char *src, size_t cpy_lent) 的函数
strncpy是个安全函数,相对于strcpy而言.这个函数我们会经常用到,面试的时候也会时不时考一下,今天写一个,一是总结,二是方便日后自己回顾. char * strncpy(char * des ...
- 【Qt开发】几个傻不拉几关于char*和const char*的不兼容问题
1. string转const char* string s ="abc"; constchar* c_s = s.c_str(); 2. const char*转string 直 ...
- char* 赋值 const char* 释放_C/C++编程笔记:C语言中 const 关键字的作用及解析,值得收藏!...
有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小. 为了满足这一要求,可以使用const关键字对变量加以限定: c ...
最新文章
- 如何不用重启在CentOS 7/ RHEL 7虚拟机中添加一块新硬盘
- 中国啤酒设备行业运营效益分析与发展现状调研报告2021-2027年
- Python学习笔记之六:在VS中调用Python
- 用tomcat 发布mule 服务 (转)
- 操作系统基础:进程知识笔记(三)
- http://www.shengshiyouxi.com
- java 大数类_Java大数类介绍
- 案例 月工作列表 c# 1614192274
- 利用IIS建立高安全性Web服务器
- mysql 支持gbk_MySQL不支持GBK编码的解决方法
- sql 字段很多怎么汇总_利用集算器实现分库汇总
- Dev cpp的使用
- 计算机快捷键任务管理器,任务管理器快捷键,小编教你电脑如何打开任务管理器...
- 说说基因组的垃圾DNA-Transposable elements
- C语言基础--从零开始初识语言(多图超详解|超万字教程)
- 微信群越来越多,我该如何科学地管理?
- java affinity_线程亲和性(Thread Affinity)
- 【随笔】移动端input type|语义与IOS按键
- 新概念二册 Lesson 15 Good news佳音 ( 陈述句直接引语变间接引语)
- 老猿Python博客文章目录索引