C语言基础复习:字符,字符数组,字符串,字符指针
2. 字符
2.1 字符定义和大小
2.2 字符的输入和输出
2.3 字符的计算
3. 字符数组
3.1 字符数组的定义和大小
3.2 字符数组的输入和输出
3.3 字符数组的计算
4. 字符串
4.1 字符串的定义和大小
4.2 字符串的输入和输出
4.3 字符串的计算
5 字符指针
5.1 指向字符的指针
5.2 指向字符数组的指针
5.3 指向字符串的指针
6. 二维字符数组
6.1 纯数组表示
6.2 字符指针表示
1. 概述
数据类型是现实世界信息表示基本元素。字符则是基本数据类型之一,与之对应的是数字。
限于字符的数量,一般字符类型都是单字节存储。
Linux的shell环境中,shell作为一种弱类型语言,仅存在字符(串)数据类型,需要数字时则会把字符串转换为字符。
恰是这种单一的弱类型脚本语言设定,赋予shell环境强大的字符和文本处理能力。
本篇则主要介绍C语言种有关字符的知识点。
2. 字符
2.1 字符定义和大小
这里的字符,值得肯定是单个字符,包括普通字符和转义字符。超过一个以上的字符,叫做字符串。
C语言示例代码如下:
#include<stdio.h>
#include<stdint.h>
int main(){
printf("char size is : %d\n",sizeof(char));
printf("char max is:%d,min is:%d\n",INT8_MAX,INT8_MIN);
printf("unsigned char max is:%d\n",UINT8_MAX);
return 0;
}
输出结果为:
char size is : 1
char max is:127,min is:-128
unsigned char max is:255
2.2 字符的输入和输出
C语言示例代码如下:
#include<stdio.h>
#include<stdint.h>
int main(){
//编译器分配
char a = 'A';
printf("%c\n",a);
//标准输入输入
printf("input your char:\n");
a = getchar();
printf("your have input:");
putchar(a);
printf("\n");
return 0;
}
输出结果:
A
input your char:
B
your have input:B
2.3 字符的计算
字符的计算,以字符对应的数字为计算元素
C语言示例代码如下:
#include<stdio.h>
int main(){
//算术运算
char a = 'A';
char b = 'Z';
printf("%c,%d %c,%d\n",a,a,a+1,a+1);
if ( b > a )
printf("%c(%d) > %c(%d)\n",b,b,a,a);
else
printf("%c(%d) < %c(%d)\n",b,b,a,a);
return 0;
}
输出结果为:
A,65 B,66
Z(90) > A(65)
3. 字符数组
字符数组跟整型数组一样定义和使用。
字符数组输出时,通过格式化输出,即可以输出单个字符,也可以输出字符串。
C语言示例代码如下:
3.1 字符数组的定义和大小
#include<stdio.h>
#define NAME "liwanliang"
int main(){
int i = 0;
//第1种方式:用数组原始方式初始化字符数组
char name1[] = {'l','i','w','l'};
printf("%d\n",sizeof(name1));
for ( i = 0; i < sizeof(name1); i++ )
{
printf("[%c]",name1[i]);
}
printf("\n");
//第2种方式:用字符串初始化字符数组
char name2[sizeof(NAME)] = NAME;
printf("%d\n",sizeof(NAME));
for ( i = 0; i < sizeof(NAME); i++ )
{
printf("[%c]",name2[i]);
}
printf("\n");
return 0;
}
输出结果如下:
4
[l][i][w][l]
11
[l] [i] [w] [a] [n] [l] [i] [a] [n] [g] []
注意以下代码的区别:
#include<stdio.h>
#include<string.h>
int main(){
int i = 0;
char a[5] = "hello";
char b[8] = "hello";
printf("sizeof(a):%d,strlen(a):%d\n",sizeof(a),strlen(a));
printf("sizeof(b):%d,strlen(b):%d\n",sizeof(b),strlen(b));
for ( i = 0; i < 5; i++ )
{
printf("[%c]",a[i]);
}
for ( i = 0; i < 8; i++ )
{
printf("[%c]",b[i]);
}
printf("%s\n",a);
printf("%s\n",b);
}
输出结果为:
sizeof(a):5,strlen(a):6
sizeof(b):8,strlen(b):5
[h][e][l][l][o][h][e][l][l][o][][][]hello
hello
3.2 字符数组的输入和输出
字符数组的输入,可以如3.1部分定义种讲述的通过编译器分配,也存在其他输入方式:
- 函数传递
- 文件输入
- 网络输入
C语言示例代码如下:
//以下仅仅是一个简单的输入字符存入字符数组的情况,程序逻辑性脆弱,仅作示例
#include<stdio.h>
#define N 10
int main(){
int i = 0;
char name[N];
do
{
name[i] = getchar();
i++;
}while( '\n' == getchar() && i < 10);
for ( i = 0; i < sizeof(name); i++ )
{
printf("%c",name[i]);
}
printf("\n");
return 0;
}
3.3 字符数组的计算
字符的计算包括算术计算和逻辑计算。
以下是一个对字符数组进行排序的C语言示例代码:
4. 字符串
4.1 字符串的定义和大小
C语言示例代码如下:
#include<stdio.h>
#include<string.h>
int main(){
//第1种方式:以字符数组打印字符串
char name[] = "liwanliang";
int i = 0;
//for ( i = 0; i < strlen(name); i++ )
for ( i = 0; i < sizeof(name); i++ )
{
printf("%c",name[i]);
}
printf("\n");
printf("my name is:%s\n",name);
//第2种方式:以字符指针的方式打印
char *name1 = "liwanliang";
printf("my name is:%s\n",name1);
return 0;
}
输出结果如下:
liwanliang
my name is:liwanliang
my name is:liwanliang
4.2 字符串的输入和输出
4.3 字符串的计算
5 字符指针
一言以蔽之,指针就是数据类型(内存大小)的内存地址,用指针运算(取址,赋值)来操作内存。
内存地址同样以变量的形式存放,故名曰指针变量。
指针是变量说法不准确,指针是存放内存地址的变量。
因为变量有只读变量(常量的一种表现形式),故指针有指针常量。
5.1 指向字符的指针
字符指针,就是指向字符的指针不准确。
字符指针,可以指向字符,字符数组,或者字符串。因为字符指针,是指向字符型内存区域的指针。
本部分探讨指向单一字符的指针。
C语言示例代码如下:
#include<stdio.h>
int main(){
char a = 'a';
//p需要用char型指针初始化
char *p = &a;
printf("input your char:\n");
*p = getchar();
printf("you have input char:");
putchar(*p);
printf("\n");
//printf("%c\n",*p);
return 0;
}
输出结果如下:
input your char:
A
you have input char:A
5.2 指向字符数组的指针
5.3 指向字符串的指针
6. 二维字符数组
6.1 纯数组表示
C语言代码如下:
#include<stdio.h>
int main(){
char name1[3][5]={{'l','i',},{'w','a','n',},{'l','i','a','n','g'}};
int i,j = 0;
for ( i = 0; i < 3; i++ )
{
for ( j = 0; j < 5; j++ )
{
printf("%c",name1[i][j]);
}
printf(" ");
}
printf("\n");
char name2[3][5]={ "li","wan","liang"};
for ( i = 0; i < 3; i++ )
{
printf("%s ",name2[i]);
}
printf("\n");
}
输出结果如下:
li wan liang
li wan liang
6.2 字符指针表示
C语言示例代码如下:
C语言基础复习:字符,字符数组,字符串,字符指针的更多相关文章
- C语言基础复习总结
C语言基础复习总结 大一学的C++,不过后来一直没用,大多还给老师了,最近看传智李明杰老师的ios课程的C语言入门部分,用了一周,每晚上看大概两小时左右,效果真是顶一学期的课,也许是因为有开发经验吧, ...
- MySQL学习笔记_8_SQL语言基础复习
SQL语言基础复习 一.概述 SQL语句注释方式 1)以"#"开头直到行尾的所有内容都是注释 2)以"--"(--后还有一个空格)开头直到行尾的所有内容都是注释 ...
- 2018.6.13 Java语言基础复习总结
Java语言基础与面向对象编程实践 第一章 初识Java 1.1机器语言 机器语言是指一台计算机全部的指令集合.机器语言室友0和1组成的二进制数,是一串串由0和1组成的指令序列,可将这些指令序列交给计 ...
- C语言基础 (6) 类型转换,数组与随机数
复习 1.隐式转换 Double a Int b = 1 A = b //编译器自动转换把b转换为double类型后 再给a赋值(隐式转换) 2.强制类型转换 (变量)类型名 Int a = 1 // ...
- C语言基础知识点整理(函数/变量/常量/指针/数组/结构体)
函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...
- ndk学习之C语言基础复习----结构体、共用体与C++开端
自己实现sprintf功能: 关于C中的系统函数sprintf在上次[https://www.cnblogs.com/webor2006/p/7545627.html]学习中已经用到过了,这里再来回顾 ...
- [Coursera][计算导论与C语言基础][Week 10]对于“数组应用练习”课后习题的思考题的一些想法
(首先,关于Honor Code,我咨询过了Help Center,分享课后练习的思考题的想法是可以的(注意不是代码),但要标明引用,引用格式来源于https://guides.lib.monash. ...
- C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)
前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...
- 【C语言】12-指向一维数组元素的指针
一.用指针指向一维数组的元素 1 // 定义一个int类型的数组 2 int a[2]; 3 4 // 定义一个int类型的指针 5 int *p; 6 7 // 让指针指向数组的第0个元素 8 p ...
随机推荐
- 安装mysql(macos系统)
1.到官网下载,直接百度"mysql"即可找到 2.双击安装包,一路安装即可 3.然后进到系统设置 4.接下来 输入coho的用户密码 设置root用户的密码 切换root用户,v ...
- Microsoft .NET Core 1.0.0 VS 2015 Tooling Preview 2 Uninstall Failed
卸载过程中总是卸载失败报0x80070001:函数不明确错误.转遍了各大论坛和QQ,最终还是在stackoverflow上找到了答案... 原因是我卸载时选择的DotNetCore.1.0.0-VS2 ...
- Python基础点
写这篇的目的并不是要把python的基础知识汇总一遍,而是着重记录一些实际编写代码时遇到的常用/重要的内容 以点的形式记录,之后遇到的内容会慢慢补充进来 1. 斜杠 / :斜字第一笔, 转义用反斜杠 ...
- centos 6.5下安装nmap工具及简单用法
Nmap是一款针对大型网络的端口扫描工具,被广泛应用于黑客领域做漏洞探测以及安全扫描,其主要功能有主机发现(Host Discovery). 端口扫描(Port Scanning). 版本侦测(Ver ...
- python基础、字符串和if条件语句,while循环,跳出循环、结束循环
一:Python基础 1.文件后缀名: .py 2.Python2中读中文要在文件头写: -*-coding:utf8-*- 3.input用法 n为变量,代指某一变化的值 n = inpu ...
- 借鉴bootstrap的方法,快速实现响应式开发
响应式开发 注意:任何框架都是一个辅助手段,只需借鉴其中的核心思想,把其中核心的东西提炼出来即可.不要因为,提到响应式就想到只能够用bootstrap来实现,框架现有的东西是可以提高我们的效率,但是其 ...
- oracle+st_geometry
最近因为性能的原因开始关注通过oracle和st_geometry直接操作数据库来解决实际业务问题.主要还是用到了“使用 SQL 处理 ST_Geometry”.对此,ESRI给出的帮助文档中的解释如 ...
- 如何自定义FusionCharts图表上的工具提示?
中的工具提示是什么?当鼠标悬停在一个特定的数据点上时就会显示工具提示,提示以下信息: 单系列图表(饼图和圆环除外):名称及数值 Pie & Doughnut:名称及数值/百分比 多系列组合图表 ...
- 开启 J2EE(一)—‘全明星队伍’
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/akkzhjj/article/details/27973427 J2EE-一套规范 J2EE(Jav ...
- linux 报错Mysql.pid 文件不存在导致service Mysqld start 失败
Mysql.pid 文件不存在导致service Mysqld start 失败 1. 到提示报错的mysql.pid 不存在的目录下 使用 touch 命令创建mysql.pid文件. t ...