C语言学习基础篇

本文详细介绍了C语言的基础知识,包括数据类型的大小、变量声明与赋值、输出格式控制、字符与字符串、数组的使用、内存布局以及指针的概念。特别强调了数组长度的获取、函数参数传递的方式以及结构体和枚举的定义。此外,还提到了动态内存分配和结构体字节对齐的影响。
摘要由CSDN通过智能技术生成

基础

数据以二进制形式存储在计算机中,1Byte=8Bit,字节是计算机中的最小可操作单位。

C中的变量/数据类型

在这里插入图片描述

基本数据类型

short、int、long、char、float、double
32位系统上各类型所占字节长度:2,4,4,1,4,8 Byte。

printf("%d\n",sizeof(int));

变量
有符号和无符号,最高位作为符号位。

int a;//变量声明,整型变量,分配内存区域。
a = 100;//变量赋值,将值存入内存。

输出格式控制
在这里插入图片描述

int a=100;
printf("%o %d %x\n",a,a,a);
printf("%#o %#d %#x\n",a,a,a);

字符与字符串
字符类型由单引号’ '包围,字符串由双引号" "包围。

char strr = 'a';
char str1[] = "http://c.biancheng.net";

转义字符\
\n 换行,\t占位,\\反斜杠
标识符
coder自己命名的,只能由字母(A-Z, a-z)、数字(0-9)和下划线(_)组成,并且第一个字符必须是字母或下划线,不能是数字。
关键字32个
在这里插入图片描述
注释,表达式,语句,运算
自动/强制类型转换
类型转换是临时性的,转换结果会保存到临时的内存空间,不会改变数据本来的类型或者值。

(float) a;  //将变量 a 转换为 float 类型
(int)(x+y);  //把表达式 x+y 的结果转换为 int 整型
(float) 100;  //将数值 100(默认为int类型)转换为 float 类型

数组

数组内存是连续的,可以作为缓存使用。在C语言中,二维数组是按行排列的。

  • 一维数组
  • 二维数组:第一维长度值可以省略。
  • 字符串数组,由" "包围的字符串会自动在末尾添加’\0’。
数组初始化
//memset使用
int a[10] = {0};
相当于:
#include<string.h>
int a[10];
memset(a,0,sizeof(a));

作用域

TIPS

获取数组长度

//获取数组长度 声明之后直接获取
int arr[10]={454,567,8,232,1,345,69,79,34,2243},len;
len = sizeof(arr)/sizeof(arr[0]);
指针

指针函数:带指针的函数。
函数指针:指向函数的指针变量。

*&a = a
f(int arr[], int n) == f(int *arr, int n)
函数传递数组的4种方式
  • 形参和实参都用数组名
void main (){int a[10];f(a,10);}
void f(int x[], int n){}
  • 实参是数组名,形参用指针变量。
void main(){int a[10];f(a,10);}
f(int *a, int n){}
  • 实参形参都用指针变量
void main(){int a[10]*p=a;f(p,10);}
f(int *x, int n){}
  • 实参为指针,形参为数组名。
void main(){int a[10]*p=a;f(p,10);}
f(int x[], int n){}
多维数组和指针

数组
在这里插入图片描述
二维数组取址和取值
在这里插入图片描述

函数作为参数
void sub(int (*x1)(int),int (*x2)(int,int)){
	int a,b,i,j;
	a = (*x1)(i);
	b = (*x2)(i,j);
}
动态分配数组长度

有效用于函数返回

int *newarr = (int *)malloc(k); //动态分配指定数组长度

结构体

结构体变量

首先定义结构,再定义结构体变量。默认值同变量一样,int型的为0,指针型的为“NULL”。

//首先定义结构体
struct book {
int page;
char *name;
}
//定义结构体变量
struct book honglou;

结构体中的变量长度,由于字节对齐的原因,结构体中的部分变量长度会与原始长度有差别。

//字节对齐示例
#include<stdio.h>
#include<string.h>
#include<windows.h>
struct stu {
    char tag[2]; //8 字节对齐
    const char *name; //8
    int age; //4
    float score; //4
    double total; //8
    long double cost; //16
    long int grade; //16 字节对齐
};
static struct stu opt = {};
int main(){
    printf("%d\n",sizeof(opt));
    system("pause");
    return 0;
}

枚举

枚举是 C 语言中的一种基本数据类型。

定义

第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。不连续枚举无法遍历。

//枚举类型
enum DAY
{
	MON=1, TUE, WED, THU, FRI, SAT, SUN
};
//枚举变量
enum DAY day;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值