C语言入门知识

本文介绍了C语言的基础知识,包括常量、变量、数据类型、运算符、字符串、main函数、自定义函数、传值与传址调用以及宏定义。常量分为字面常量和符号常量,变量涉及数据类型、存储地址和初始值。数据类型包括整型、浮点型和字符型。运算符涵盖算术、比较和逻辑运算。字符串处理涉及strlen、strcpy等函数。了解这些基础知识对于C语言的学习至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言是一种广泛应用于操作系统、嵌入式系统、编译器和游戏开发等领域的高级编程语言,以下是C语言知识的总结:

基础语法:C语言的基础语法包括数据类型、变量、运算符、表达式、控制语句等,这些都是编写C语言程序的基本要素。

1、常量

C语言中,常量和变量都是用来存储数据的,但它们有一些不同的特点和用途。下面分别介绍一下C语言中的常量和变量。

常量
常量是指在程序运行时不会改变其值的数据,可以分为字面常量和符号常量。

1.1 字面常量

字面常量是指直接在程序中写出来的常量,例如整数常量、浮点数常量、字符常量和字符串常量。例如:

int a = 10;       // 整数常量
float b = 3.14;   // 浮点数常量
char c = 'A';     // 字符常量
char str[] = "hello world";  // 字符串常量

1.2 符号常量

符号常量是指用标识符表示的常量,一般用#define预处理器指令进行定义。例如:

#define PI 3.1415926
#define MAX 100

2、变量

变量是指在程序运行时可以改变其值的数据。在C语言中,变量有以下几个要素:

变量名:用来标识变量的唯一名称。
数据类型:决定变量可以存储的数据类型,例如整型、浮点型、字符型等。
存储地址:变量在内存中的存储位置。
初始值:变量在定义时可以指定初始值,如果没有指定初始值,则变量的值是不确定的。
例如:

int num = 10;   // 定义一个整型变量num,初始值为10
float f = 3.14; // 定义一个浮点型变量f,初始值为3.14
char ch = 'A';  // 定义一个字符型变量ch,初始值为'A'

3.数据类型

C语言的基本数据类型包括整型、浮点型和字符型。

3.1 整型

整型包括有符号整型和无符号整型两种类型,有符号整型可以表示正数、负数和零,无符号整型只能表示非负数。

C语言中的整型有以下几种类型:

char:字符型,占用1个字节,可以存储一个字符的ASCII码。
short:短整型,占用2个字节,可以存储-32768~32767之间的整数。
int:整型,占用4个字节,可以存储-2147483648~2147483647之间的整数。
long:长整型,占用4个字节或8个字节,可以存储更大范围的整数

例如:

char c = 'A';
short s = 10;
int i = 100;
long l = 100000000L;

3.2 浮点型

浮点型包括单精度浮点型和双精度浮点型两种类型。

C语言中的浮点型有以下两种类型:

float:单精度浮点型,占用4个字节,可以表示7位有效数字。
double:双精度浮点型,占用8个字节,可以表示15位有效数字。

例如:

float f = 3.14;
double d = 3.14159265358979323846;

3.3 字符型

字符型用于存储单个字符,占用1个字节,可以存储一个字符的ASCII码。

例如:

char c = 'A';

派生数据类型
派生数据类型是指由基本数据类型派生出来的数据类型,包括指针、数组、结构体和联合体等。

3.4 指针

指针是存储内存地址的变量,可以用来访问和操作内存中的数据。

例如:

int a = 10;
int *p = &a;   // 定义一个指向整型变量a的指针变量p

数组

数组是由相同类型的元素组成的集合,可以通过下标访问数组中的元素。

例如:

int arr[5] = {1, 2, 3, 4, 5};   // 定义一个整型数组arr,包含5个元素

3.5 结构体

结构体是由不同类型的元素组成的集合,可以将不同类型的变量组合在一起。

例如:

struct student {
    char name[20];
    int age;
    float score;
} stu;   // 定义一个学生信息结构体

3.6联合体

联合体是由不同类型的变量组成的集合,但同一时刻只能有一个成员变量被使用。

例如:

union data {
    int i;
    float f;
    char c;
} d;  // 定义一个数据联合体

总之,C语言提供了丰富的数据类型,可以根据实际需求选择合适的数据类型来存储和处理数据

4.算术运算符

1、加、减、乘、除、取余(+ - * / %)结合方向自左向右
2、关系运算符(> < ==“”>= <= !=“”>
3、逻辑运算符(! && ||)
4、位运算符(<>> ~ | ^ &)
5、赋值运算符(=及符号扩展赋值运算符)
6、条件运算符(? : )
7、逗号运算符( , )
8、指针运算符(* &)
9、求字节运算符(sizeof)
10、强制类型转换运算符((类型))
11、分量运算符( . ->)
12、下标运算符([])

5.比较运算符

== (等于):用于比较两个值是否相等,如果相等则返回1,否则返回0。

!= (不等于):用于比较两个值是否不相等,如果不相等则返回1,否则返回0。

(>)( 大于):用于比较左边的值是否大于右边的值,如果是则返回1,否则返回0。

< (小于):用于比较左边的值是否小于右边的值,如果是则返回1,否则返回0。

(>=)(大于等于):用于比较左边的值是否大于等于右边的值,如果是则返回1,否则返回0。

<= (小于等于):用于比较左边的值是否小于等于右边的值,如果是则返回1,否则返回0。

这些比较运算符可以用于各种类型的数据,包括整型、浮点型、字符型等等。在比较时,需要注意数据类型的匹配问题,否则可能会出现错误的结果。

6、逻辑运算

C语言中的逻辑运算符有三种:与(&&)、或(||)和非(!)。

与(&&):只有两个操作数都为真(非零)时,结果才为真(非零);否则,结果为假(0)。

或(||):只要有一个操作数为真(非零),结果就为真(非零);否则,结果为假(0)。

非(!):对一个操作数取反,如果操作数为真(非零),则结果为假(0);如果操作数为假(0),则结果为真(非零)。

例如:

int a = 3, b = 4, c = 0;
if (a && b) { // a和b都为真,结果为真
printf("a && b is true\n");
}
if (a || c) { // a为真,c为假,结果为真
printf("a || c is true\n");
}
if (!c) { // c为假,结果为真
printf("!c is true\n");
}

7、字符串

C语言中的字符串是由一组字符组成的数据类型。字符串在C语言中是以null字符(‘\0’)结尾的字符数组。C语言中的字符串处理函数都是基于这种特殊的字符数组实现的。

C语言中的字符串可以用单引号或双引号表示。用单引号表示的是一个字符,用双引号表示的是一个字符串。

例如:

char c = 'A';  // 定义一个字符
char str[] = "Hello, world!";  // 定义一个字符串

C语言中的字符串常用操作包括:
字符串长度:使用strlen函数可以获取字符串的长度。
字符串复制:使用strcpy函数可以将一个字符串复制到另一个字符串中。
字符串连接:使用strcat函数可以将两个字符串连接起来。
字符串比较:使用strcmp函数可以比较两个字符串是否相等。
字符串查找:使用strstr函数可以在一个字符串中查找另一个字符串。

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

int main() {
    char str1[] = "Hello";
    char str2[] = "World";
    char str3[20];

    // 拷贝字符串
    strcpy(str3, str1);
    printf("str3 = %s\n", str3);

    // 连接字符串
    strcat(str3, str2);
    printf("str3 = %s\n", str3);

    // 计算字符串长度
    printf("strlen(str3) = %d\n", strlen(str3));

    // 比较字符串
    if (strcmp(str1, "Hello") == 0) {
        printf("str1 equals \"Hello\"\n");
    }

    // 查找字符串
    char *p = strstr(str3, "World");
    if (p != NULL) {
        printf("Found \"World\" at position %d\n", p - str3);
    }

    return 0;
}

8、main函数和自定义函数

C语言中的main函数是程序的入口,程序从这里开始执行。它是一个特殊的函数,其返回类型必须是int,表示程序的结束状态。main函数可以接受命令行参数,这些参数可以在程序运行时传递给它。

自定义函数是用户自己编写的函数,用于完成特定的任务。自定义函数可以接受参数,也可以返回一个值。在程序中调用自定义函数可以实现代码的模块化,提高代码的可重用性和可维护性。

9、传值调用和传址调用

传值调用
传值调用是指在调用函数时,将实参的值复制一份给形参,函数中对形参的修改不会影响实参的值。这种方式在函数中只能读取实参的值,不能修改实参的值。

示例代码:

void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

int main() {
    int x = 10, y = 20;
    swap(x, y);
    printf("x = %d, y = %d\n", x, y); // 输出 x = 10, y = 20
    return 0;
}

传址调用
传址调用是指在调用函数时,将实参的地址传递给形参,函数中对形参的修改会影响实参的值。这种方式在函数中可以修改实参的值。

示例代码:

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 10, y = 20;
    swap(&x, &y);
    printf("x = %d, y = %d\n", x, y); // 输出 x = 20, y = 10
    return 0;
}

在函数中,通过指针访问实参的值,可以修改实参的值。在调用函数时,需要使用取地址符 &将实参的地址传递给形参。注意,形参是指针类型,需要在函数定义中声明。

10、宏定义

C语言宏定义是一种预处理指令,用于将某个标识符或表达式替换为指定的文本。宏定义可以使程序更加简洁、可读性更高,并且可以提高程序的灵活性和可维护性。

宏定义的语法如下:

#define 宏名 替换文本

其中,宏名是标识符,替换文本是要替换成的文本,可以是任意合法的C语言表达式或语句。

带参数的宏定义

#define ADD(x,y)  ((x)+(y))

宏定义中的#与##
1.#
在带参数的宏定义中,#运算符后面应该跟一个参数,预处理会把这个参数转换为一个字符串

#include<stdio.h>

#define PRINT(X) printf("the "#X" value is %d\n",X)

int main()
{
	int a = 2;

	PRINT(a);

	return 0;
}

输出:

the a value is 2

PRINT(a) 展开相当于 printf(“the " “a” " value is %d\n”,a)

2.##可以把位于它两边的符号合成一个符号。 它允许宏定义从分离的文本片段创建标识符

#include<stdio.h>
#define A(X,Y) X##Y 

int main()
{
	int tmp123 = 123;
	printf("%d\n", A(tmp, 123));
	return 0;
}

输出:

123

总结

总之,C语言是一种强大而灵活的编程语言,熟练掌握C语言的基础知识和高级特性,可以让程序员更加高效地开发各种应用程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值