c语言局部变量stu,C语言学习笔记
第一部分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语言学习笔记相关推荐
- c语言万能预编译,Objective-C学习笔记
import 指令(将文件的内容在预编译的时候拷贝到写指令的地方) import Foundation 框架 NSLog 函数 NSLog(@"Hello, World!"); N ...
- 《R语言入门与实践》学习笔记四
第四天任务: 完成项目玩扑克牌后1/2,并通过项目学会以下技能: 1)从一个数据集中抽取个别数据值. 2)在一个数据集中改变个别数据的取值. 3)编写逻辑测试程序. 4)使用R的缺失值符号NA. -- ...
- 《数据结构》C语言版 严蔚敏版本 学习笔记
笔者的话: 严蔚敏版本的这本<数据结构>脉络清晰,第二到第六的章节围绕绪论展开,而书本封面处也有本书结构框图,希望读者在学习的同时能够对照结构框图,搭建知识框架. 第一章 绪论 早期计算机 ...
- c语言程序的基本结构(学习笔记1)
我是一个c语言初学者,这几天开始接触c编程.简单的了解了一下c程序的结构. c语言一般由预处理命令,函数,变量,语句&表达式,注释这6部分组成. 下面是一个最简单的c程序. #include& ...
- 信捷 plc c语言 pdf,信捷plc学习笔记复习过程.pdf
1.疑问: 软元件地址和输入端子是什么关系? 2.指令分类 3.可以使用流程开始,流程结束指令来分程序块 也可以使用指令块开始结束指令来折叠程序 两个具体的区别还得测试 4.扩展模块 地址分配 模块 ...
- python语言入门n-Python基础语法学习笔记
一.内存管理 变量在动态语言中,无须事先声明,也不需要制定类型: 编程中一般无须关心变量的存亡,也不需要关心内存的管理: Python使用"引用计数"记录所有对象的引用数 当对象引 ...
- 牛客c语言数组,牛客网学习笔记 - C/C++
常见的字符转意: & a m p ; 表示 & & l t ; 表示 < & g t ; 表示 > & q u o t ; 表示 " & ...
- 树莓派用c语言pwm控制电机,树莓派学习笔记之PWM控制直流电机转速
树莓派控制PWM控制电机转速 一.硬件 树莓派 12V直流电机 L298N电机驱动器 220V转12V变压器 二.连线 树莓派与L298N需要共地 L298N驱动模块 树莓派接线 三.树莓派pytho ...
- 《R语言入门与实践》学习笔记二(chapter4~6)
目标 : 如何存储.检索和修改计算机内存中的数据 设计一个扑克牌模拟系统,能够自动洗牌和发牌,系统可以记住发牌的结果, 四个任务 : 1 创建一副牌 2 发牌和洗牌函数 3 改变点数系统适应不同的 ...
最新文章
- 申请 Let's Encrypt 通配符 HTTPS 证书
- ***杂记-2013-07-12
- 一个关于WCF调用远程链接返回405错误不允许使用此方法的问题
- 双击打开Inventor文件
- 阿里巴巴中文站架构设计实践(何崚)图书
- 中国居住服务业数字化发展报告
- 3d相册 html 代码_女朋友生日,我送她网页相册,她感动的哭了(文中有惊喜)...
- 河北外国语学院计算机宿舍,河北外国语学院宿舍怎么样 住宿条件好不好
- 学python可以从事什么工作-学完Python后可以从事哪些工作?
- 防止Mac电脑屏幕进入休眠状态,该怎么设置?
- hdu 2159 FATE
- 《UNIXLinux程序设计教程》一1.3 UNIX基本概念
- Angr安装与使用之使用篇(十二)
- 上线一套 BI 系统到底需要多少钱???
- 安装 Unity Hub 发现 进不了 Unity3D 了
- 离散数学之关系(传递闭包)
- [乡土民间故事_徐苟三传奇]第二回_巧答言长工骂财主
- 系统异常SVC与PendSV指令及CM3 处理器内部寄存器分析
- 前端开发应收藏的各大网站
- matlab ifft函数实例,【 MATLAB 】信号处理工具箱之 ifft 简介及案例分析
热门文章
- Unity中国象棋(二)——走棋
- 面试技巧、专面、HR面、群面
- woocommerce-paypal-payments/modules/ppcp-button/src/Assets/SmartButton.php如何解决AVADA主题
- bios显示计算机故障,笔记本电脑BIOS出现故障怎么办 常见BIOS故障解决方案
- 以企查查为例详解如何用爬虫采集企业信息及电话邮箱数据
- 手机怎样测海拔高度?手机测量海拔的方法分享。
- 异硫氰酸荧光素(FITC)标记的抗人IL-1ra单克隆抗体,FITC-IL-1ra
- win10系统安装mscomm32.ocx控件
- 跟着廖雪峰学python 006
- echarts地图api series_ECharts地图绘制和钻取简易接口详解