第一部分C语言的组成

一.基本数据类型

java中有八中基本数据类型,而在c/c++中没有byte和boolean(在C中0为false,非0为true)

在c语言中多了long long unsiged(无符号,只能大于等于0)singned整形修饰

和java语言同一种数据类型所占内存大小不一致,char,long

sizeof运算符,计算当前数据类型所占用的字节的大小,如果传入变量名称,计算出变量对应的数据类型的长度

C的基本数据类型(九种数据类型)

char ,int , float ,double , signed ,unsigned ,long ,short and void;

java中的数据类型和C语言的数据类型对比

java C

1 boolean byte char

2 char short short

4 int float int long float

8 long double double ,long long

二.基本输入输出函数

在c语言中都是先声明在使用的,printf输出函数和scanf输入函数均在头文件中已声明

数据输入或者输出的表现形式

%d - int

%ld – long int

%c - char

%f - float

%u – 无符号数

%hd – 短整型

%lf – double

%x – 十六进制输出 int 或者long int 或者short int

%o - 八进制输出

%s – 字符串

%p-指针

scanf("%d",&i);//将int变量i的地址传递 输入数据赋值给i的地址对应的数据 \n不能停止输入

printf("i=%d\n",i);

三.指针

指针就是内存地址

内存的特点

最小单位是byte

内存是线性连续的排列

32为操作系统最大的内存4G ,操作系统管理的一段内存空间,32位操作系统每一个进程的最大可用内存是4G,4G=2^32=4294967296

什么是指针

对内存最小单元进行编号 0~~4294967295

每一个内存单元的编号称之为指针

指针就是内存地址

指针的作用

可以直接访问硬件

快速传递数据

表示复杂的数据结构

方便处理字符串等

指针访问内存的运算符

&取地址运算符 &变量名

*取对象运算符 *指针

#include

int main(){

int i;//在内存中申请4个字节内存 申请大小根据数据类型确定

i=10;//通过变量名操作这段内存

printf("i=%d\n",i);

//通过取地址运算符获取变量i的内存地址

&i;

//通过*取对象运算符操作内存地址对应的内存空间

*&i = 20;

printf("i=%d\n",i);

return 0;

}

指针变量

保存指针的变量也就是保存地址的变量;

指针变量的定义: 保存指针的数据类型 * 变量名

指针变量在32位操作系统上的内存大小为4个字节(固定的)

指针的数据类型和指针类型

指针类型: 指针变量去掉变量名 保存首地址对应的变量类型*

指针的数据类型: 指针变量指向的变量数据类型

指针的数据类型不确定指针变量占用的内存大小,决定指针变量访问的内存长度

值传递和引用传递

java中:

基本数据类型都是值传递

对象传递都是引用传递

C语言中:一般都是值传递

指针常见的一些错误

混用不同的指针 不同指针变量不能直接赋值,可强转之后再赋值,但需保证强转有意义

野指针 定义的指针变量没有合法指向,没有保存任何变量的首地址;

定义指针变量要有合法的指向,如果暂时没有就指向NULL指针 int *pi=NULL

NULL指针不可读不可写,访问就会报错;

四.数组

数组

java数组对象 c语言数组相同数据类型的集合;

定义数组: int arr【4】;

访问数组: arr【0】 arr【1】 C语言不检查角标越界;

求数组元素个数: sizeof(arr)/sizeof(arr【0】)

数组名代表首元素首地址

数组的传递需要传递数组名和数组元素的个数

void print_arr(char arr[4],int count){

int i=0;

for(i=0;i

printf("arr[%d]=%d\n",i,*(arr+i));

}

}

指针和数组之间的关系

数组名代表首元素首地址

C语言中不检查角标越界

int *pi=arr

*(pi+0)《==》pi[0] …… *(pi+3)《==》pi[3]

进程的内存分布

· - 局部变量 被{}包裹的变量 作用范围再{}以内 生命周期执行完{}后销毁

全部变量 没有被任意的{}包裹 可以一直使用

static修饰局部变量 作用范围不变,生命周期和全局变量一直

void *指针

不同类型的指针不可以直接赋值需要强转之后才可赋值然而对于void*指针则可以直接进行赋值不需要强转,这个就是这个指针的特点;

对于java中object类型的数据转化可以用void*指针来接受,

malloc和free使用

字符串

c语言中没有字符串,以字符数组表示字符串,以“\0”作为字符串的结束标记

字符串的定义---两种定义方式

//按照字符数组方式定义字符串

//hello

// char arr[6]={'h','e','l','l','o','\0'};

// char arr[6]={"hello"};

char arr[6]="hel";

int coun;

// arr[0]='d';

// printf("arr=%s\n",arr);

//定义数组方式二

// char *pc = "hello"; //定义了字符串常量

// char *pc=arr;//定义普通字符串 可以修改字符串的数据

// *pc='r';

// char *pc=NULL;

// pc="hello";

// *pc='p';

- 字符串的传递只需要传递字符串首元素首地址,有\0结束标记

- 字符串求长度:便利字符数组找到\0结束标记

- 字符串函数

- //字符串长度 coun = strlen(arr);

- 字符串比较 int c = strcmp(arr,arr1);

五.结构体

定义结构体,三种类型,普通的结构体,全局的结构体,匿名的结构体;

#include

//定义结构体类型 int

struct Student{//struct 结构体标识 Student 结构体名

char *name;//姓名

int age;

float score;

};

struct Student{//struct 结构体标识 Student 结构体名

char *name;//姓名

int age;

float score;

}stu;//定义结构体类型全局变量

struct{//struct 结构体标识 Student 结构体名

char *name;//姓名

int age;

float score;

}stu;//匿名结构体 只能定义一个变量

int main(){

//结构体类型变量

struct Student stu;//局部变量

return 0;

}

访问结构体中的字段

stu.name="hello";

stu.age=23;

stu.score=59.9;

结构体传递属于值传递

结构体定义指针 - struct Student *pstu

通过结构体一级指针访问结构体字段

(*pstu).name

通过一级指针指向访问pstu->name

6.联合体union

- 不能够同时操作多个字段,只能一次操作一个字段

- 联合体内存是里面最大字段占用的内存

六. 枚举

七. typedef关键字 起别名

作用:

可以简化定义,某些函数指针名或者结构体指针比较长,可以通过起别名的方式来定义,此种方式可以简化代码;

int i;//i变量名

typedef int i;//i代表int数据类型

i a;//定义了int数据类型

struct Student stu;//stu结构体变量名

typedef struct Student stu;//stu 代表结构体类型 struct Student

stu sstu;//定义了结构体类型的变量

void (*padd)(int,int,int *);//padd函数指针变量名

typedef void (*padd)(int,int,int *);//padd代表指针类型

padd ppadd;

c语言局部变量stu,C语言学习笔记相关推荐

  1. c语言万能预编译,Objective-C学习笔记

    import 指令(将文件的内容在预编译的时候拷贝到写指令的地方) import Foundation 框架 NSLog 函数 NSLog(@"Hello, World!"); N ...

  2. 《R语言入门与实践》学习笔记四

    第四天任务: 完成项目玩扑克牌后1/2,并通过项目学会以下技能: 1)从一个数据集中抽取个别数据值. 2)在一个数据集中改变个别数据的取值. 3)编写逻辑测试程序. 4)使用R的缺失值符号NA. -- ...

  3. 《数据结构》C语言版 严蔚敏版本 学习笔记

    笔者的话: 严蔚敏版本的这本<数据结构>脉络清晰,第二到第六的章节围绕绪论展开,而书本封面处也有本书结构框图,希望读者在学习的同时能够对照结构框图,搭建知识框架. 第一章 绪论 早期计算机 ...

  4. c语言程序的基本结构(学习笔记1)

    我是一个c语言初学者,这几天开始接触c编程.简单的了解了一下c程序的结构. c语言一般由预处理命令,函数,变量,语句&表达式,注释这6部分组成. 下面是一个最简单的c程序. #include& ...

  5. 信捷 plc c语言 pdf,信捷plc学习笔记复习过程.pdf

    1.疑问: 软元件地址和输入端子是什么关系? 2.指令分类 3.可以使用流程开始,流程结束指令来分程序块 也可以使用指令块开始结束指令来折叠程序 两个具体的区别还得测试 4.扩展模块 地址分配 模块 ...

  6. python语言入门n-Python基础语法学习笔记

    一.内存管理 变量在动态语言中,无须事先声明,也不需要制定类型: 编程中一般无须关心变量的存亡,也不需要关心内存的管理: Python使用"引用计数"记录所有对象的引用数 当对象引 ...

  7. 牛客c语言数组,牛客网学习笔记 - C/C++

    常见的字符转意: & a m p ; 表示  & & l t ; 表示 < & g t ; 表示 > & q u o t ; 表示 " & ...

  8. 树莓派用c语言pwm控制电机,树莓派学习笔记之PWM控制直流电机转速

    树莓派控制PWM控制电机转速 一.硬件 树莓派 12V直流电机 L298N电机驱动器 220V转12V变压器 二.连线 树莓派与L298N需要共地 L298N驱动模块 树莓派接线 三.树莓派pytho ...

  9. 《R语言入门与实践》学习笔记二(chapter4~6)

    目标 : 如何存储.检索和修改计算机内存中的数据 设计一个扑克牌模拟系统,能够自动洗牌和发牌,系统可以记住发牌的结果, 四个任务 : 1 创建一副牌 2   发牌和洗牌函数 3 改变点数系统适应不同的 ...

最新文章

  1. 申请 Let's Encrypt 通配符 HTTPS 证书
  2. ***杂记-2013-07-12
  3. 一个关于WCF调用远程链接返回405错误不允许使用此方法的问题
  4. 双击打开Inventor文件
  5. 阿里巴巴中文站架构设计实践(何崚)图书
  6. 中国居住服务业数字化发展报告
  7. 3d相册 html 代码_女朋友生日,我送她网页相册,她感动的哭了(文中有惊喜)...
  8. 河北外国语学院计算机宿舍,河北外国语学院宿舍怎么样 住宿条件好不好
  9. 学python可以从事什么工作-学完Python后可以从事哪些工作?
  10. 防止Mac电脑屏幕进入休眠状态,该怎么设置?
  11. hdu 2159 FATE
  12. 《UNIXLinux程序设计教程》一1.3 UNIX基本概念
  13. Angr安装与使用之使用篇(十二)
  14. 上线一套 BI 系统到底需要多少钱???
  15. 安装 Unity Hub 发现 进不了 Unity3D 了
  16. 离散数学之关系(传递闭包)
  17. [乡土民间故事_徐苟三传奇]第二回_巧答言长工骂财主
  18. 系统异常SVC与PendSV指令及CM3 处理器内部寄存器分析
  19. 前端开发应收藏的各大网站
  20. matlab ifft函数实例,【 MATLAB 】信号处理工具箱之 ifft 简介及案例分析

热门文章

  1. Unity中国象棋(二)——走棋
  2. 面试技巧、专面、HR面、群面
  3. woocommerce-paypal-payments/modules/ppcp-button/src/Assets/SmartButton.php如何解决AVADA主题
  4. bios显示计算机故障,笔记本电脑BIOS出现故障怎么办 常见BIOS故障解决方案
  5. 以企查查为例详解如何用爬虫采集企业信息及电话邮箱数据
  6. 手机怎样测海拔高度?手机测量海拔的方法分享。
  7. 异硫氰酸荧光素(FITC)标记的抗人IL-1ra单克隆抗体,FITC-IL-1ra
  8. win10系统安装mscomm32.ocx控件
  9. 跟着廖雪峰学python 006
  10. echarts地图api series_ECharts地图绘制和钻取简易接口详解