3_常用语句,常用细节(持续更新中)

文章介绍了C语言中sizeof运算符用于计算数据类型或变量所占内存大小,strlen函数则计算字符串的实际长度。还讨论了typedef用于类型别名,static修饰符的作用,extern声明外部变量,以及宏定义。同时提到了输入输出函数gets和puts,以及递归和指针等基本概念。

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

常用语句

  1. sizeof()

计算出所占字节数包含\0,每一个字符串都会默认自动添加一个\0作为结束标志

返回类型为%zu,但是可以用%d和%u等来接收

另外它是一个操作符

sizeof()常用于求非char类型数组的元素个数

char类型的数组一般用strlen()库函数求长度,strlen()判断到\0时停止计数

int arr[]={1,23,,4,5,,6,4};
int len=sizeof(arr)/sizeof(arr[0]);//整个数组字节除以一个元素字节
printf("%zu", sizeof("my name"));//打印为8 空格和\0都算一个字节
  1. strlen()

字符串长度函数

与sizeof不同,它不会包含\0,以字符串实际长度为返回值

需要头文件<string.h>

int a[10]={1,2,3};
printf("%d",strlen(a));//打印为3
  1. typedef

类型(重)定义

typedef unsigned int u_int
int main()
{
    unsigned int num=100;
    u_int num2=100;//两条语句效果一样
    return 0;
}
  1. static

修饰局部变量时改变其生命周期,修饰所有变量都会只能在本文件使用,其他源文件不得使用(防止重名)

修饰局部变量:退出函数时不会销毁,但是仅在当前函数中,其他函数不能调用

void test()
{
    static int a=1;//退出函数时a不会销毁
    a++;
    printf("%d\n",a);
}
void main()
{
    test();
    test();
    //printf("%d\n",a);//这行语句会报错
    //就算修饰了局部变量也不能跨函数调用
}   
  1. extern

声明外部符号

可以声明同工程下其他文件的全局变量函数

下面a文件跟b文件在同一工程下

   //a.c文件

int g_val=2022;
int Add(int x,int y)
{
    return x+y;
}
    //b.c文件

extern int g_val;
extern Add(int x,int y);
int main()
{
    printf("%d",Add(g_val,g_val));
    return 0;
}
  1. #define

定义常量和宏

常量:永远不会改变的量,频繁使用的数字建议定义为常量,因为可能会因为某些原因(甲方)进行更改,直接在#define定义的常量中更改会方便很多

 #define pai 3.1415926 //定义的常量不会改变,并且是全局常量
 #include<stdio.h>
 int main()
{
    printf("%lf",pai);
    return 0;
}

宏:完整地替换

 #define Add(x,y) x+y
 int main()
{
    int C=Add(1,2)*3;//相当于1+2*3 不用括号括起来 因为Add(1,2)就是1+2
    return 0;
}
 #define Add(x,y) ((x)*(y))
 int main()
{
    int c=Add(3*3,1+2);
    return 0;//最优的写法是都加上括号,这样即便是表达式也可以很好的运算
}
  1. gets()

输入函数,可以包含空格,而scanf()不能包含空格,按回车时录入

    char arr[20]={0};
    gets(arr);
  1. puts()

输出函数,可以直接输出字符数组,用换行符取代字符串的结束标志\0

char c[10]="my name";
puts(c);
  1. goto

goto+命名 可以直接跳转到 <命名:>的地方

for(int i=0;i<=100;i++)
{
    int count=0;
    count++;
    if(count>133) goto dio;
}
dio: printf("当前count>133");

常用细节

  1. 数组名就是一个地址,数组首元素地址

  1. 实参:常量,变量,表达式,函数等

  1. 形参:当函数调用完成后就自动销毁了(函数名括号中的变量)

  1. 设计函数时,功能要单一,不要有打印函数等,以方便重复使用

  1. 优化函数,减少计算机的运算量

  1. 递归函数会加大计算机运算量,通常不会使用

  1. 不用第三个变量交换两个值

int a=3;
int b=5;
a=a^b;
b=a^b;
a=a^b;
  1. 整数在内存中存储的是补码

进行二进制位计算时 使用的都是补码,正数的三码都相同

负数

源码 是其数用二进制表达出来,符号位(首位)为1

反码 符号位不变其他全取反

补码 反码的基础上+1

  1. 整型提升

int变char时只保留二进制的后八位(4字节变1字节)

char变int时前面都补齐符号位

没有符号位时补零

如 char的10000001

变为 int的11111111111111111111111110000001

  1. 指针在32位机器上是4个字节

在64位机器上则是8个字节

  1. 最好使用 传址调用

不用开辟新的空间 还可以通过地址来改变原来的值

传值调用

需要开辟出一块一样大的空间来存储形参,不能通过值来改变原来的值

  1. 传参是从右向左传参的

如 add(x,y) 先传入y,然后才是x

  1. *&a <==> a

常用细节更新
  1. 赋值运算符返回值为左值 (已被右值赋值后的左值)

  1. C语言小数默认为双精度类型,在小数后加上f为单精度

如 6.31f

  1. sizeof() 是操作符,sizeof() 括号中的值 不参与运算

  1. [] 是一个操作符 数组名和下标是两个操作数

arr[2] <==> 2[arr]

  1. char类型是整型家族中的,用ASCII码来存储一个字符

  1. \0的ASCII码为零 其他字符全为非零

  1. printf()中类型如果与参数不符,将打印出0

  1. 数组名是数组首元素地址 但是有2个例外

sizeof(数组名)

数组名表示整个数组,计算的是整个数组大小,单位是字节

&数组名

数组名表示整个数组,取出的是整个数组的地址

  1. 全局变量未初始化时,默认值为0

  1. 不同类型进行比较时低的类型要转换成高的类型再进行比较

如: 一个int和一个unsigned int比较,int需要转换成unsigned int

  1. 表达式为真返回值为数字1 例: 2>1 返回值是1

  1. 待更新……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值