重温不是新学,在多年开发经验的基石下,常识性概念会一笔而过。
一 字符串
字符串是一个或多个字符的序列,被双括号括起来:
"我是字符串"
字符串被存储在char
类型的数组中。
空字符:\0
。
C 语言的字符串一定是以空字符结束的。
//
// Created by Victor on 2019/10/22.
//
#include <stdio.h>
#include <string.h>
#define HAPPY "欢迎你的光临"
int main() {
char name[40];
printf("你叫什么名字呢?\n");
scanf("%s", name);
printf("你好, %s, %s\n", name, HAPPY);
printf("name 存储了多少个字符? %zd", strlen(name));
return 0;
}
你叫什么名字呢?
Victor yang
你好, Victor, 欢迎你的光临
name 存储了多少个字符? 6
scanf() 会自动在字符串后面加上空字符。
scanf() 只读取了 Victor
它在遇到空格、制表符、换行符的时候会停止。所以 scanf() 只能读取一个单词。
长度
sizeof() 是以字节为单位给出对象的大小。
strlen() 能得到字符串中的字符长度,注意它会忽略字符串最后一个空字符。
一个字节存储一个字符。
二 常量
明示定义
C 预处理器可以定义常量:
#define PI = 3.1415926
这样的定义也称为明示定义。
程序编译时,会把 PI 替换为 3.1415926, 这叫编译时替换。
const 限定符
const int YEAR_DAY = 365;
const 限定变量为只读。
#include <limits.h>
limits.h 中定义了一些明示常量。
三 类型转换
自动类型转换
char ch;
int i;
float fl;
fl = i = ch = 'C';
printf("ch = %c,i = %d,fl = %2.2f\n", ch, i, fl);
ch = ch + 1;
i = fl + 2 * ch;
fl = 2.0 * ch + i;
printf("ch = %c,i = %d,fl = %2.2f\n", ch, i, fl);
ch = 1107;
printf("Now ch = %c\n", ch);
ch = 80.89;
printf("Now ch = %c\n", ch);
ch = C,i = 67,fl = 67.00
ch = D,i = 203,fl = 339.00
Now ch = S
Now ch = P
强制类型转换
强制类型转换符: 圆括号和它扩起来的类型。
float test = 1.234F;
printf("%f, 强制转换为 int:%d", test, (int)test);
1.234000, 强制转换为 int:1
四 循环
while
printf("循环开始---\n");
int a = 0;
while (a < 10) {
a++;
if (a % 2 == 0) {
continue;
}
printf("%d ", a);
if (a > 8) {
break;
}
}
printf("\n循环结束--\n");
循环开始---
1 3 5 7 9
循环结束--
for
for (int i = 0; i < 10; ++i) {
printf("%d", i);
}
do while
int i = 0;
do {
++i;
} while (i < 10);
五 分支
int i1 = 101;
if(i1 > 100){
printf("大于100 %d", i1);
} else if (i1 > 50) {
printf("大于50 %d", i1);
} else {
printf("小于 50");
}
六 ctype.h
函数名 | 如果是下列参数时,返回值为真 |
---|---|
isalnum() | 字母数字(字母或数字) |
isalpha() | 字母 |
isblank() | 标准的空白字符(空格、水平制表符或换行符)或任何其他本地化指定为空白的字符 |
iscntrl() | 控制字符,如Ctrl+B |
isdigit() | 数字 |
isgraph() | 除空格之外的任意可打印字符 |
islower() | 小写字母 |
isprint() | 可打印字符 |
ispunct() | 标点符号(除空格或字母数字字符以外的任何可打印字符) |
isspace() | 空白字符(空格、换行符、换页符、回车符、垂直制表符、水平制表符或其他本地化定义的字符) |
isupper() | 大写字母 |
isxdigit() | 十六进制数字符 |
函数名 | 行为 |
---|---|
tolower() | 如果参数是大写字符,该函数返回小写字符;否则,返回原始参数 |
toupper() | 如果参数是小写字符,该函数返回大写字符;否则,返回原始参数 |
七 条件运算符
int i2 = 2;
int i3 = i2 > 5 ? 1 : -1;
printf("%d", i3); // -1
八 switch
int i4 = 2;
switch(i4){
case 1:
printf("我是1");
break;
case 2:
printf("我是1");
break;
default:
printf("我是谁");
break;
}
九 指针简介
是一个值为内存地址的变量(或数据对象)。
地址运算符 &
&
后面跟一个变量,会得到该变量的地址。
比如 &name
表示 name 的地址。
地址运算符 *
后跟一个指针名或地址时,*给出储存在指针指向地址上的值。
int *pi;//pi是指向int类型变量的指针
char *pc;//pc是指向char类型变量的指针
float *pf,*pg;//pf、pg都是指向float类型变量的指针。
#include<stdio.h>
void interchange(int*u,int*v);
int main(void){
int x=5,y=10;
printf("Originally x=%d and y=%d.\n",x,y);
interchange(&x,&y); //把地址发送给函数
printf("Now x=%d and y=%d.\n",x,y);
return 0;
}
void interchange(int*u,int*v){
int temp;
temp=*u;//temp获得u所指向对象的值
*u=*v;
*v=temp;
}