业余大学生初识C语言

   

        最近开始接触C语言,虽然只是初步了解,初步掌握其概念。通过学习,了解到C语言包含变量、常量、循环变量、指针变量、结构体等核心元素,以及基本的编程逻辑。现在结合记忆和已编写的代码进行复习巩固。

"\n"//表示换行,毋庸置疑是初学者接触和使用最多的
"\t"//表示水平制表符,Tab键==四个空格,写代码的时候编译器会自动的美化空格,制表符在调试字符间的空隙还是很方便的
"\a"//表示警报,电脑会发出蜂鸣声,这个就是太奇葩了导致我就见过一眼就忘不掉了
// 警报应用示例(慎用)
printf("\a检测到异常温度!");  // 触发主板蜂鸣器

"\ddd"表示八进制的,1~3位的八进制数字
"\xdd"表示十六进制,两位十六进制的数字
"\?"//表示防止被认为是特殊字符,老编译器里面可能会有三个字符构成的特殊键,为了防止?和别的字符劈腿
"\"//就一个光的表示制表符,例如想打印printf(“helloworld!”);
==printf("printf(\"hello wold!\");");
"\r"//回车符,用于将光标移动到当前的开头
"\b"//退格符将光标往回退一个字符的位置
"\f"//换页符,我现在还没遇到过并不是很清楚

 算术、运输符:

7 % 4;    // 求余 → 3(钟表循环的数学本质)
7 / 4;    // 整型除法 → 1(丢失精度的现实隐喻)
7.0 / 4;  // 真除法 → 1.75(类型提升的智慧)

5/4,当想取到小数的时候,可以在运算数里加上小数,5.0/4 == 1.25 or 5/4.0 == 1.25
与(AND):&&,当两个操作数都为真时,结果为真
或(OR):||,当至少一个操作数为真时,结果为真
非(NOT):!,对操作数取反,真变假,假变真
在 C 语言中,EOF 是一个宏定义,通常值为 -1,用于表示文件结束

"|"按位或:在二进制操作中,| 用于对两个数的每一位进行或操作。只要两个对应位中有一个为1,结果位就为1
eg:a = 5  # 二进制 0101
b = 3  # 二进制 0011
result = a | b  # 结果为 0111,即 7
print(result)  # 输出 7

getchar(),获取ASCII码数值
putchar(),打印数字对应的ASCII码的字符
//一般变量都是用 int表示,因为ASCII码都是整数对应储存字符,即使使用的时char定义的变量,在getchar()都会强制提升至整型。
//我之前一直都把字符和数字分得很清楚,但在编程的时候,char 同样可以定义数值,打印也可用%s,但int则不可以转化位字符类型
//还有关于打印,到底用那个,整型用"%d","%4d"则表示打印或者读取几个整数,%02d就是为了防止月份为一位数时,在前面补上一个零。
//eg://输入 20051212.输出//year:    month:    date:
int y = 0,m = 0,d = 0;
scanf("%4d %2d %2d",&y, &m, &d);
printf("year:%d month:%02d date:%02d",y,m,d);

//还有关于打印printf(),要明确类型
我就在double和float之间卡了很久,double是默认double=0.0;初始化用%lf打印
而float用float=0,0f;初始化,用%f打印,要打印几位小数就加.数。
eg:"%.2f"此为打印两位小数,double同理。

while()循环挺神的,如单细胞变成多细胞后引发质变带来的思维一样,正如《算法导论》里的"循环不变式是理解迭代的钥匙。" 下面是极值优化。"

极值算法优化
int arr[] = {0};
int i = 0;
while (i<4)
{
    scanf("%d",&arr);//scanf的读取规则和getchar一样都是读取缓冲区的信息,以空格为分隔符,21_312就为三个值,分别为21,_,312,读取也就读一个。
    i++;//输入这种一大串的又分单个的值,可直接用这个循环来解决

}
int max = arr[0];
i = 1
while(i<4)
{
     if(arr[i] > max)
     max = arr[i];  
     i++;
}
printf("%d",max);

当有continue,在循环语句时,结果为真返回该函数,当遇到break,判断结果为真,直接结束该函数,向下进行

        我印像挺深刻的就是static:

// 文件内私有函数
static void internal_logging() { /* 日志实现 */ }

// 持久化计数器
void counter() {
    static int count = 0;  // 突破作用域限制
    count++;
}

// 模块内部全局变量
static int cache_size = 0;  // 隐藏实现细节

        C语言的编程逻辑:定义变量的大小,就为变量的大小,如sizeof(int)//输出4,那么用int定义的变量都为4个字节;如int* p指针变量的定义,变量对象指向 int 类型的指针变量,指针变量本质就是存放地址的位置,32位电脑的指针变量就为32bit=4byte,因为一个地址用四个字节来表示,所以为4字节,而电脑为64位的同理,变量大小为8byte。

#include <stdio.h>

int main() {
    /* 类型即契约:
       int类型承诺4字节存储空间
       (根据C标准为至少2字节) */
    printf("int size: %zu\n", sizeof(int)); // 典型输出4
    
    /* 指针的哲学本质:
       地址的容器,容量由系统架构决定 */
    int* p; 
    printf("pointer size: %zu\n", sizeof(p)); // 32位系统输出4,64位输出8
}
演示32位的系统

变量int a = 42在内存中的存在形式:
+---------+---------+---------+---------+
| 字节1   | 字节2   | 字节3   | 字节4   |  ← 4字节空间
| 00101010 00000000 00000000 00000000 |  ← 二进制存储
+---------+---------+---------+---------+
地址: 0x7ffd1234

        同一源文件下的函数是可以直接调用的,如我在1.c文件里的函数,可在同源下的2.c直接使用,不用再去创建函数,先声明(extern int add(a,b))在这个extern可以类比成头文件,例如<stdio.h>,不过头文件不只有函数的声明还

// math_util.c
int add(int a, int b) { 
    return a + b; 
}

// main.c
extern int add(int a, int b); /* 声明契约:承诺存在此函数实现 */

int main() {
    printf("3+5=%d\n", add(3,5)); // 链接器负责地址绑定
    return 0;
}

总结:

  1. 模块法则:头文件应当如玻璃般透明,源文件应当如黑盒般密封

  2. 编译哲学:分离编译如同社会分工,链接过程如同商业合作

  3. 类型思维:每个变量声明都是与编译器的契约,不可背弃

指针和和结构体,对于小白的我来说,还没什么储备的知识,在这里就不做总结了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值