重温C语言(3)之基础语法一笔过

Feb 2, 2020


重温不是新学,在多年开发经验的基石下,常识性概念会一笔而过。 ad1f6bce2fd8c4d5d417e3d9b2014484

一 字符串

字符串是一个或多个字符的序列,被双括号括起来: "我是字符串"

字符串被存储在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 中定义了一些明示常量。

46f8aad808d96b6feeb01721b0bdf3de

三 类型转换

自动类型转换

    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");
    }

dadc40ded3d623c530f25dbbc48be934

六 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;
    }

925b8aeb7503380380da7fd771499b71

九 指针简介

是一个值为内存地址的变量(或数据对象)。

地址运算符 &

&后面跟一个变量,会得到该变量的地址。 比如 &name 表示 name 的地址。

地址运算符 *

后跟一个指针名或地址时,*给出储存在指针指向地址上的值。

int *pi;//pi是指向int类型变量的指针
char *pc;//pc是指向char类型变量的指针
float *pf,*pg;//pf、pg都是指向float类型变量的指针。

d0661ea8d19699f3f23d8917fb734f7b

#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;
}

14e1400ca47f1568d8895f7acd622fe0