c语言基础应知应会1

1.特殊的char类型。

字符类型 char 也可以设置 signed 和 unsigned 。
signed char c; // 范围为 -128 到 127
unsigned char c; // 范围为 0 到 255

注意,C 语⾔规定 char 类型默认是否带有正负号,由当前系统决定.
这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是
unsigned char 。
这⼀点与 int 不同, int 就是等同于 signed int

2.如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
3. do while(0) 用于宏定义。好习惯。
4. ASCII 码

我们不需要记住所有的ASCII码表中的数字,但是我们最好能掌握⼏组特殊的数据:
• 字符 A~Z 的ASCII码值从65~90
• 字符 a~z 的ASCII码值从97~122
• 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
• 数字字符09的ASCII码值从4857
• 换⾏\n的ASCII值是:10
• 在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察
在这里插入图片描述

5.如果函数不需要返回值,返回类型设置为void,如果不写,函数默认返回int类型的值。
6. 被static修饰的局部变量n只会被创建和初始化⼀次,不需要在每次调⽤test函数时都进⾏初始化,即相当于提出去当了全局变量。
7.内存

在这里插入图片描述

8.宏定义一定要带括号,否则不知道传的参数是否也是个表达式。宏定义就是无脑替换,不会自己给你带括号。宏定义无形参。宏函数也是。

#define SQUARE_SUM(a, b) ((a) * (a) + (b) * (b))

宏定义本身不参与编译过程,而是在预处理阶段由预处理器对源代码进行文本替换

9.void* 类型指针

⼀般 void* 类型的指针是使⽤在函数参数的部分,⽤来接收不同类型数据的地址,这样的设计可以

实现泛型编程的效果,使得⼀个函数来处理多种类型的数据。

10.const修饰指针变量的时候

结论:
• const如果放在的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。
但是指针变量本⾝的内容可变。
• const如果放在
的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指
向的内容,可以通过指针改变。

11.char

char只占一个字节,指针每次也指向一个字节。这样char 和指针就能做一些事。例如算字符串的个数。char指针malloc 的大小,就是char 指针数组的大小。

//指针-指针求字符串长度
#include <stdio.h>
int my_strlen(char *s)
{
char *p = s; while(*p != '\0' )
p++;
return p-s;
}
int main()
{
printf("%d\n", my_strlen("abc"));
return 0;
}

12 inline

在C语言中,inline 关键字是一个相对较新的特性,它首次在C99标准中被引入。inline 的主要目的是向编译器建议某个函数应该被内联展开,即函数的代码应该在每个调用点直接插入,而不是像通常那样进行函数调用。这样做可以减少函数调用的开销,包括保存和恢复栈上下文、参数传递和返回地址等。

#include <stdio.h> 
inline int max(int a, int b) 
{    
	return (a > b) ? a : b;
}
  int main() 
{
      int x = 10, y = 20; 
      printf("Max of %d and %d is %d\n", x, y, max(x, y));
      return 0;
}

在这个例子中,max 函数被定义为一个 inline 函数。编译器可能会选择在 main 函数中直接插入 max 函数的代码,而不是进行函数调用。

13 函数和宏
  • 宏的优势
  1. ⽤于调⽤函数和从函数返回的代码可能⽐实际执⾏这个⼩型计算⼯作所需要的时间更多。所以宏⽐
    函数在程序的规模和速度⽅⾯更胜⼀筹。
  2. 更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的表达式上使⽤。反之
    这个宏怎可以适⽤于整形、⻓整型、浮点型等可以⽤于 > 来⽐较的类型。宏的参数是类型⽆关
    的。
  • 宏和函数相⽐的劣势:
  1. 每次使⽤宏的时候,⼀份宏定义的代码将插⼊到程序中。除⾮宏⽐较短,否则可能⼤幅度增加程序
    的⻓度。
  2. 宏是没法调试的。
  3. 宏由于类型⽆关,也就不够严谨。
  4. 宏可能会带来运算符优先级的问题,导致程容易出现错。
14 数组

除此1,2两种情况之外,所有的数组名都表示数组首元素的地址。

  1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数
    组。
  2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假装多好123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值