《每天一分钟学习C语言·八》字符串,指针与二维数组,补码,按位取反

1、
枚举

enum WeekDay  //这是一个数据类型
{//MonDay, TusDay,....
};
enum WeekDay day = MonDay;
printf(%d\n”, day); //输出0,枚举里面元素都是从0开始排列

2、
字符串
(1)在字符串中加双引号前面需要有反斜杠
(2)%p是打印地址,%u输出无符号十进制,-123输出补码4294967173
%8.3f //右对齐,宽度为8,保留三位小数,宽度不足8用0或空格补齐,有负号表示左对齐
(3)const char m[10] = “helloworld”; //const在最前面表示值不能被更改
const char * pst = “helloworld”; //值不能被更改,但pst地址可以更改
char * const pst = “helloworld”; //地址不能更改,但值可以更改
char const * pst = “helloworld”; //值不能改,地址可变
综上:const在 * 左边值不能改,const在*右边地址不能改
(4)字符串末尾默认有空字符’\0’,如char * name = “huang”; //总字节数为6
(5)char [10] = {‘a’, ‘b’, ‘c’, ‘\0’}; //带空字符表字符串,无空字符表字符数组
(6)char * name = “helloworld”; //等价于char name[] = “helloworld”; 需要注意的是数组定义的字符串可以修改,指针定义的字符串无法修改
(7)arr为数组名也是第一个元素地址,arr+1表示第二个元素地址,但arr是指针常量,不可修改的左值,否则会改变数组存储位置即地址,也不允许++arr这样自增操作,这种只能用于可修改的左值。如果是指针定义的字符串,地址是可以修改自增的,如char * name = “huang”; //name++表示指向下一个元素地址
(8)定义字符数组在内存中开辟一块地址空间,把字符串存进去,指针定义字符串是把字符串地址赋给指针,所以前者数组地址和字符串地址不同,后者地址相同。
(9)地址与整数相加 = 整数X地址指向类型字节大小+地址
地址与整数相减 = 地址-整数X地址指向类型字节大小(需要转16进制)
两指针地址相减必须保证两指针指向同一个数组,如0Xff8d8-0Xff8d0=2表示两个Int类型的距离
(10)puts(name) //输出字符串遇到’\0’结束,自动换行
gets(name) //输入字符串,吸收\n转化成\0字符
fgets(name, 5, stdin); //返回第一个字符地址,输入hu,保存在Name中的为hu\n\0\0 输入huan,保存huan\0 输入huanghua,保存huan\0
fputs(name, stdout); //输出字符串遇到\0结束,不自动换行
(11)strlen(name); //计算字符串长度,不包含\0
strcat(str1, str2); //把字符串str2拼接到str1后面形成新的字符串str1,末尾自动加\0 (注意:str2字符串在见到str1字符串的空字符开始拼接,拼接成新的字符串内容拷贝到str1指向的内存空间,拷贝的是内容不是地址)
strncat(str1, str2,5); //str2中前五个字符拼接到str1后面形成新的str1,末尾自动加\0
strcmp(str1, str2); //两字符串从左到右ascii码值比较,相等返回0,str1>str2返回正整数,str2>str1返回负整数
strncmp(str1, str2, 5); //比较两字符串前五个字符
strcpy(str1, str2); //把str2字符串拷贝到str1中,形成新的str1,拷贝的是字符串内容不是地址
strncpy(str1, str2, 5); //把str2中前5个字符拷贝到str1中
(12)getchar()接收一个字符并返回,无字符返回-1或EOF
putchar(‘S’); 输出一个字符
(13)atoi(str) //把字符串变成整型输出,如int i = atoi(“22”); //i就是22整型
itoa(i) //把整型变成字符串输出,如char * p = itoa(22); //输出字符串22
atof() //数字字符串转double类型,如double b = atof(“23.4”); //输出23.4
ftoa() //浮点型转字符串,char * p = ftoa(23.4); //输出字符串23.4
atol() //字符串转long类型,long a = atol(“23”); //输出long类型23
注意:最大只能转换2147483648,想要转换更大的需要atoll
ltoa()// long类型转字符串,char *p = ltoa(23); //输出字符串23
(14)sprintf(str, “%d, %s”, 2, “huanghua”); //字符串str存放的是2,huanghua
(15)%.5s //最多输出五个字符,%5s //至少输出五个字符,不够空格补
(16)fscanf(fp, “%d %d %s”, &i, &j, str); //从fp文件指针中读取数据到i,j,str中,第三块是输入列表
fprintf(fp, “%d %d %s”, i, j, str); //把i,j,str内容写入到fp指针文件中去,,第三块是输出列表
(17)char * strchr(const char *s, int c) //如果s字符串包含字符c,函数返回指向s字符串首次出现c字符的指针(末尾空字符也是字符串的一部分,所以在查找范围内),若未找到c字符,返回NULL
(18)char *strpbrk(const char *s1, const char *s2) //若s1字符串包含s2字符串的任意字符,函数返回指向s1字符串首位置的指针,否则返回NULL
(19)char * strrchr(const char *s, int c) //函数返回s字符串中最后一次出现c字符的位置指针(末尾空字符也在查找范围),若找不到c字符返回NULL
(20)char * strstr(const char *s1, const char *s2) //函数返回指向s1字符串中s2字符串出现的首位置,若找不到s2返回NULL

3、
指针与二维数组
int a[4][2]; //a数组有4个大元素,每个大元素有2个小元素。
(1)a是第一个大元素的地址,即a == &a[0]
(2)a[0]是第一个大元素,可以看成b,则b[0],b[1]分别是这个大元素数组里的第一、二个元素,则a[0]是大元素里第一个元素的地址,即a[0] == &a[0][0]
(3)*a == a[0] , ** a == a[0][0]
(4)int ( * p)[2] == int [][2] //这个类似于指针定义的字符串,char * p = “huang”; 等价于char p[] = “huang”
(5)Int * p[2]; //定义一个int *类型的数组,有两个元素,每个元素都是int *类型
(6)a[m][n] == * ( *(a+m)+n)
(7)typedef int arr[4]; //使arr成为一个新的数据类型,该数据类型包含四个Int型数据。则定义变量arr a;等价于int a[4] ; typedef arr pst[3]; //使pst成为一个新的数据类型,该数据类型包含三个arr型数据。则定义变量pst p;等价于int pst[3][4];
关于指针记住几句话:
char *p; char *q;
(1)赋地址p = q;
1、改变一个地址存放的值,另一个地址存放的值也会改变,因为都是指向同一个地址
2、p、q都是两个独立的个体,地址赋完后互不干扰,改变p值不会影响q,改变q值不会影响p。如p = q = 1001H,若q = 1002H,那么p还是1001H。
(2)赋地址的地址 &p = &q;
1、改变地址的地址存放的地址,另一个地址也会变,因为都是指向同一个地址的地址。
2、&p、&q是两个独立的个体,地址的地址赋完后互不干扰,改变&q值不会影响&p,改变&p值不会影响&q。如&p = &q = 1001H,若&q = 1002H,那么&p还是1001H。

4、

int a[10];
int * p = a;
* ++p == p[1]
++ *p == p[0]+1
*p++ //先取*p值,然后p指向下一个元素地址
*p+=2 //*p = *p+2

5、
补码
正数补码是自己
负数补码如-3补码:
3转二进制 0011
取反+1 1101
因是Int型前面还有28个1
-3补码十六进制为:fffffffd

补码求原码:fffffffd
取反+1 0011 为3
加个负号为-3

是正是负看最高位是0还是1
char(1字节八位看第八位是0还是1)-128(80)——+127(7F)
short(2个字节)-32768(8000)——+32767(7FFF)
int(4字节)-2147483648(80000000)——+2147483647(7FFFFFFF)

按位取反~
~9值
9是1001,前面省略28个0
~9是0110,前面省略28个1,此时最高位为1可知原码为负数
取反+1为1010,是10
加个负号为-10

按位左移<<
8<<3值
8是1000,左移三位右边补0为0100 0000,即64

6、
一个符号求值,两个符号判断真假
4&6 == 4
4&&6 ==1为真
!4 == 0为假

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/296617.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探讨多模态模型和计算机视觉

近年来&#xff0c;机器学习领域在从图像识别到自然语言处理的不同问题类型上取得了显着进展。然而&#xff0c;这些模型中的大多数都对来自单一模态的数据进行操作&#xff0c;例如图像、文本或语音。相比之下&#xff0c;现实世界的数据通常来自多种模态&#xff0c;例如图像…

string的库函数reserve、resize

系列文章 http://t.csdnimg.cn/u80hL 目录 系列文章[TOC](目录) 一、reserve——请求容量的变化二、resize——操作对象使用的空间 一、reserve——请求容量的变化 改变对象的capacity——他会请求开辟和缩小对象所占的空间&#xff0c;reserve只能操作对象未使用的空间&…

vue的表单收集案例

Vue的表单收集案例 这只是最基础的表单收集&#xff0c;并未涉及到element-ui。 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>收集表单数据</title><script type"text/javascript" src"../js…

美好的⼀天 从ActionTab开始 美观、智能、⾼效的新标签⻚ iTab 新标签页iTab新标签页Atop100工具推荐

文章目录 ActionTabiTab 新标签页iTab新标签页&#xff0c;小组件&#xff0c;起始页&#xff0c;标签页&#xff0c;日历&#xff0c;股票&#xff0c;浏览器扩展 https://www.actiontab.cn/ ActionTab 收费&#xff1f;&#xff1f;&#xff1f;&#xff1f; iTab 新标签页iT…

docker-compaose部署openldap

前段时间在本地搭建了一套gitlab geo测试环境&#xff0c;因为需要集成ldap&#xff0c;所以特意搭建下&#xff0c;特此作为笔记记录下。 文章目录 1. 前置条件2. 编写docker-openldap.yml文件3. 登录4. 使用创建组创建用户登录测试 1. 前置条件 安装docker-compose 安装docke…

嵌入式-stm32-用PWM点亮LED实现呼吸灯

一&#xff1a;知识前置 1.1、LED灯怎么才能亮&#xff1f; 答&#xff1a;LED需要低电平才能亮&#xff0c;高电平是灯灭。 1.2、LED灯为什么可以越来越亮&#xff0c;越来越暗&#xff1f; 答&#xff1a;这是用到不同占空比来实现的&#xff0c;控制LED实现呼吸灯&…

1.倒排索引 2.逻辑斯提回归算法

1.倒排索引 https://help.aliyun.com/zh/open-search/retrieval-engine-edition/introduction-to-inverted-indexes 倒排索引&#xff08;Inverted Index&#xff09;是一种数据结构&#xff0c;用于快速查找包含某个特定词或词语的文档。它主要用于全文搜索引擎等应用&#…

计算机图形学理论(3):着色器编程

本系列根据国外一个图形小哥的讲解为本&#xff0c;整合互联网的一些资料&#xff0c;结合自己的一些理解。 CPU vs GPU CPU支持&#xff1a; 快速缓存分支适应性高性能 GPU支持&#xff1a; 多个 ALU快速板载内存并行任务的高吞吐量&#xff08;在每个片段、顶点上执行着色…

反激式开关电源电路的测试记录(一)

反激式开关电源电路的测试记录&#xff08;一&#xff09; Chapter1 反激式开关电源电路的测试记录&#xff08;一&#xff09;一、测前准备二、测试总结 Chapter2 反激式开关电源电路测试记录&#xff08;二&#xff09;Chapter3 UC3842电源管理芯片详细解读一、管脚描述&…

蓝桥杯2020年5月青少组Python程序设计国赛真题

1、 上边是一个算法流程图,最后输出的b的值是() A.377 B.987 C.1597 D.2584 2、 3、如果整个整数X本身是完全平方数,同时它的每一位数字也都是完全平方数我们就称X 是完美平方数。前几个完美平方数是0、1、4、9、49、100、144......即第1个完美平方数是0,第2个是 1,第3个…

TypeScript学习笔记归纳(持续更新ing)

文章目录 前言 二、TypeScript的优势体现在哪里&#xff1f; 1、执行时间上的区别 2、基础数据类型区别 3、TS优势 三、TypeScript的关键特性 四、TypeScript的类型系统 1、什么是类型注释&#xff1f; 2、类型系统核心 - 常用类型 1&#xff09; 基本类型&#xff0…

Verilog RAM/ROM的数据初始化

文章目录 一、初始化方式二、测试 FPGA设计中RAM和ROM作为存储器用来存储可变或不可变类型的数据。 ROM初始化一般是加载固定数据&#xff0c;RAM声明时默认为不定态数据&#xff0c;初始化时可以让数据为全1或者全0。 一、初始化方式 复位时按地址写入初值always (posedge cl…