一、字符串

字符串:就是一串字符, 用英文双引号引起的一串字符

    字符串的结束标志是“\0",不算做字符串的内容

注意:单引号引起来的单个元素是字符,

 

举个例子:

int main()
{
    char arr1[] = "hello"; // 不定义数据的大小,C语言会根据后面给的字符串的大小设置这个字符数组的长度
    char arr2[] = {'a','b','c'};
    printf("arr1 = %s\n", arr1);
    printf("arr2 = %s\n", arr2);
    return 0;
}

对于数组arr1 来说,存储的字符串“hello”,字符串有结束符是“\0“, 打印时遇到“\0“说明字符串结束了;

但是对于arr2 来说,存储的是3个字符,打印时要一直找到“\0“,才会结束,所以运行起来会有不符合赋值的情况,如下:

 

 

将arr2后面,添加“\0“,运行如下:

int main()
{
    char arr1[] = "hello"; 
    char arr2[] = {'a','b','c','\0'};
    printf("arr1 = %s\n", arr1);
    printf("arr2 = %s\n", arr2);
    return 0;
}

 

 

下面验证下“\0”不算作字符串的内容

strlen()是计算字符串的长度,需要引入头文件string.h

#include <string.h>
#include <stdio.h>

int
main() { char arr1[] = "hello"; char arr2[] = {'a','b','c'}; // 随即值 char arr3[] = {'a','b','c','\0'}; int len1 = strlen(arr1); int len2 = strlen(arr2); int len3 = strlen(arr3); printf("len1 = %d\n", len1); printf("len2 = %d\n", len2); printf("len3 = %d\n", len3); return 0; }

结果:

 

 

 二、转义字符---转变了原来字符的意思

比如要打印"\tests\test.c",\t不是一个、,一个t,表示的是一个制表符(tab),\t就是转义字符

 

 

 

 

 

 

 三字母词:“??)”会被解析成 “]”

要实现??),需要\?\?\),来获得??)

 

举例1:打印一个单引号、一个双引号

int main()
{
    printf("%c\n",'c'); //printf在打印数据的时候,可以指定打印格式,%c表示字符
    printf("%s\n", "abc");//%s表示字符串
    printf("%d\n", 100);
    printf("%c\n",'\'');// 转义单个单引号,否则前面2个单引号被看作一对,后面一个单引号无配对,报错
    printf("%s\n", "\"");// 同上
    return 0;
}

结果:

 

 

 

举例2:\ddd跟\xdd

#include <stdio.h>
int main()
{
    printf("%s\n", "\130");// 8进制的130就是十进制的88,打印出来是X,X的ASCII 码值就是88
printf("%s\n", "\x30");// 0,value=48
return 0; }

总结:每个字符都有一个值,就是ASCII表中对应的ASCII值,

 

举例3: 求字符串的长度

#include <stdio.h>
#include <string.h>
int main()
{
    printf("%d\n", strlen("c:\test\328\test.c"));//14,\t算一个字符,\32是一个八进制的(八进制不含8,所以8不算)
}

 

三、注释---用来解释复杂的代码

注释://

 

四、操作符

 

 

 

源码取反,得到反码,反码加1得到补码

 

 

 

 强制类型转换

 

 

关系操作符

 

逻辑与:

 

 

 

 三目操作符举例:

五、其他基础

static修饰全局变量,改变了变量的作用域,让这个静态的全局变量只能在自己所在的源文件内部使用,出了源文件就没法使用了。

举个例子:

extern ----申明外部符号的。

add.c文件

 

test.c文件 

上面的例子运行报错,因为add.c文件中的static修饰的全局变量的作用域是该源文件内部。

3.static修改函数

add.c文件中定义一个函数Add()

 

 

test.c文件中调用外部文件的函数时,首先要申明外部函数:extern 关键字   申明函数的返回类型   函数名(变量类型)

 

运行结果OK。

但是如果static修饰了了定义的函数,运行出错,无法解析该函数。

即:static修饰函数,也是改变了函数的作用域,即改变了函数的链接属性。

被static修饰的函数,外部链接属性就变成了内部链接属性。

 

#define 定义常量 和宏

 1.#define定义常量

#define MAX 60   // 定义表示符常量MAX为60

int main()

{

  int a  = MAX;  //  只要代码中用到了MAX,就是这里定义的60(未作任何修)

  return 0;

}

 

2.#define 定义宏

①宏的概念:

在标识符的基础上加了一个参数。宏是带参数的

举个栗子:求2个数中的较大者

 

 

 

 可以宏的定义更加简洁,不需要定义类型 

 

 32位-->有2的32次方 个 序列号,每个编号都对应一个内存块的话,该编号就是该内存块的地址。即32位的pc可以有2**32个地址。

一个内存单元表示一个字节