c语言学习笔记

news/2024/12/2 13:39:38/

C语言学习重点的知识点:

1. 关键字:函数的,字符串的等部分常见的关键字;

2.  字符串的拷贝,数组和指针实现;和内存有关;

3.  对内存的操作;计算内存地址; 

4. 算法必须熟练;

C基础

1. 变量的类型和大小

char, float ,int  ,long, short等字节长度;

char: 1个字节

float:4个字节

int: 4个字节

short:2个字节

Long: 4个字节

long long:8个字节

double: 8个字节

char a[10]:10个字节

int a[10]:40个字节

float a[10]:40个字节

2. 指针的字节大小

char *ptr1;      sizeof(ptr1) = 4;

int *ptr2;     sizeof(ptr2) = 4

float *ptr3;  sizeof(ptr3) = 4

指针存放的是地址值,地址是四个字节,地址指向的空间大小另算 

void *p =malloc(100);  仅仅表示p可以转换成char *,int* 等,是没有void *的;

3.C的数据类型:

 a. int ,char .float

 b. struct ,数组,enum, union;

 c. 指针; 

 d void  类型;

 

3 常量,变量;

unsigned int  a;  (0~ 2^32 -1);

int;  -2^31~2^31-1

unsigned  int  ; 0~2^32-1;

short ;   -32768~32767

unsigned short: 0~2^16-1;

4.整型数据的溢出

unsigned  short  a = 65535;

unsigned short b = a +1;

那么.b= 0;

 

如果是有符号数:

 short  a = 32767;

 short b = a +1;

那么.b=-32768;

 

正向整型数益处以后,从最小开始,无符号从0开始,有符号从负的最小值开始;

反向溢出时,从正的最大值开始;

5. 字符变量

1)单引号‘’表示字符,双引号" "表示字符串;

2字符变量只占一个字节;

6.stcpy的使用

char c1 ,c2[10];

 

c1 = 'a';

c2 ="a";-----会出段错误;正确的写法:strcpy(c2, "a");

7. 地址

char a[100]="hello";

printf("%d\n",a);-----显示-1077796936,是个负数,因为地址最高位为1,被看成了符号位,认为是负数

printf("%x\n",a);-----显示bfc21fb8,是个地址;

8. 移位运算符<< , >>

0000 0010 << 1;变成0000 0100 ,相当于乘以2,扩大2倍;

               >>1, 变成0000 0001,相当于除以2,减小2倍;

9.数组越界

int a[100];  a是一个整型数组,有100个元素,a[0]~a[99]

a[100]:  在函数中出现的时候,这个错误叫做越界

10. 有符号,无符号存放在内存中都是补码的形式;

正整数:原码,反码 ,补码都一样; 

如3:

原码:0000 0000 0000 0011

反码:0000 0000 0000 0011

补码:0000 0000 0000 0011

如-3:

原码:1000 0000 0000 0011  

反码:1111 1111 1111 1100  在原码的基础上,符号不变(最高的1),其余取反

补码:1111 1111 1111 1101  在反码的基础上,+1; 

11.运算顺序

a=12;

a+=a-=a*a;

a-=a*a; ==> a= a-a*a=12-12*12; ==-132;

a+=a; a=-132-132=-264;

12.逗号运算符

表达式1,表达式2,表达式3,表达式4,  最终的值是表达式4的值

13. 输入输出函数

字符的输入输出函数:putchar(), getchar()

字符串的输入输出函数:gets(). puts();

格式化的输入输出函数:scanf();printf();

 

putchar(a); 把字符a输出到显示器;

函数原型:int putchar(int c);     

int getchar();   输入的字符到返回值中;

14.格式化的输入输出

%d:带符号的十进制;

%o:无符号八进制;

%x:无符号十六进制;

%u:无符号十进制;

%c:字符形式,一个字符;

%s:字符串的形式;

%f:实数的形式;

%e:指数的形式;

%g:宽度较短的%f, %e的形式;

 

L:长整型数;

M(正整数):数据的最小宽度;

N(正整数):对实数,表示n个小数;

                 对字符串,表示截取多少个字符;

“-”:靠左对齐;

 %6.2s“hello”   输出 6列 ,只取 he,前面补四个空格 ;右对齐 

%- 6.2s“hello”   输出 6列 ,只取 he,后面补四个空格 ;左对齐 

 %6.2f : 1.2345  , 输出的 时候 是  1.23,前面补3个空格 ;右对齐 

%-6.2f ,  同上,右面补空格,左对齐 

15.scanf()

int a,b,c;

scanf("%d,%d,%d",&a,&b,&c);

输入时 :1,2,3,输出为:1,2,3

输入: 1 2 3     输出  1   不定数据 

 

char s1[100];

scanf("%s", s1);

printf("%s\n", s1);

输入: hello  输出 : hello

输入 : hello world  输出 : hello

scanf 遇到空格 结束 输入 

注意:读取字符串时,每读完一串要用getchar();清空缓存区

16.gets  

输入一个字符串

函数的原型: char *gets(char *s);

char *str="hello world!";------碰到char*  就要想到字符串,指向的是字符串;

函数返回值:如果返回s的指针,正确;

               如果返回NULL, 表示操作出现问题,错误;

函数的参数: char  *s: 表示从输入设备输入的字符串存放到s所指的空间:

注意:gets()在linux 中认为非常危险,容易出现内存问题;

 17. puts

函数的作用:输出一个字符串;

函数的原型:int puts(const char *s);

18.const: 修饰的内容不允许被直接改变;

1) const   char *s:

char *s---- s所指向的字符串;s---是指针变量

两个理解:

1. const  修饰的char *,还是s?

   const 在这里修饰的是char *;不是s

2. 是char  *所指向的字符串不允许改变,还是指针变量s不允许改变?

 char *  所指向的字符串不允许被改变; s的地址是可以改变的;

2)  char  * const  s;

表示指针变量s的内容不允许改变; 

3) const  char * const s;

表示:char *所指向的字符串不允许被改变;指针变量s不允许被改变;

const char *str-----------*str不允许改变

char const *str-----------*str不允许改变

char *const str----------str内容不允许改变,即地址不变

const char *const str ----str*str都不允许改变

19. 死循环的两种方式

a)while1{语句;}

b)for;;{语句;}

 



http://www.ppmy.cn/news/347625.html

相关文章

printf函数一些不太为人熟知的格式定义参数

&#xff08;1&#xff09;%.32s . 小数点用于负点的格式说明符号大家都知道了。其实她还可以用于字符创的截断&#xff08;最大长度&#xff09;限定&#xff0c;Jovi GG给得例子。 例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则 第9个字符以后的内…

暴力递归到动态规划(四)

⭐️前言⭐️ 本篇文章是从暴力递归到动态规划篇目的最后一篇文章&#xff0c;包含了几道题目还有最终的大总结&#xff0c;相信这篇文章能让各位读者对动态规划有更深一步的了解。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601…

KW 新闻 | KaiwuDB 发布智慧矿山解决方案

5月21日&#xff0c;天津第七届世界智能大会&#xff08;WIC&#xff09;圆满落幕。作为智能领域的国家级盛会&#xff0c;WIC 汇聚了全球知名院士、顶级学者、产业领袖分享先进技术和实践经验&#xff0c;推进智能技术创新合作。KaiwuDB 受邀出席大会并正式发布智慧矿山解决方…

使用 Docker 高效搭建本地开发环境(详细教程)

Docker本地开发环境的好处 试错 对开发者而言&#xff0c;每天会催生出的各式各样的新技术都需要尝试&#xff0c;然而开发者却不太可能为他们一一搭建好环境并进行测试。时间非常宝贵&#xff0c;正是得益于 Docker&#xff0c;让我们有可能在一条或者几条命令内就搭建完环境…

plus.runtime.version总是13.8.4

引言 最近在uniapp中使用到了plus.runtime.version&#xff0c;但是在开发环境下一直无法获取到真正的版本号&#xff0c;他的值一直都是13.8.4&#xff0c;在全局进行搜索也没有发现哪里设置了13.8.4&#xff0c;后来查阅了相关资料才知道这并不是自己写错了。 场景复现&…

redhat 7及以上版本crsctl start crs启动失败问题

因为rac老版本启动依赖的是init.d&#xff0c;而redhat 7及以上版本默认为systemd&#xff0c;两者的差异较大。导致redhat 7及以上版本启动crs的ohasd服务时会卡住一段时间且最后无法启动成功&#xff0c;strace日志则会显示无法找到/var/tmp/.oracle/npohasd文件。 手动的方…

AppTask.moveToFront()源码分析

ActivityManager.AppTask.moveToFront()执行后&#xff0c;导致其他AppTask退到了后台&#xff0c;点击返回直接回到了桌面&#xff08;HomeScreen&#xff09;&#xff0c;没有回到上一个AppTask。 下面分析一下源码看看为什么其他AppTask退到了后台&#xff0c;如何解决该问题…

提升网络安全的关键利器:EventLog Analyzer

导语&#xff1a; 随着网络攻击和数据泄露事件的不断增加&#xff0c;企业对于网络安全的关注度也日益提高。在这样的背景下&#xff0c;安全信息与事件管理系统&#xff08;SIEM&#xff09;成为了提升网络安全的关键利器之一。本文将重点介绍一款强大的SIEM工具——EventLog…