C语言学习(11)
C语言的关键字
static、const、typedef、extern、define……
动态内存分配:malloc、calloc。realloc分配的内存
(1)static和extern配合
第一种修饰变量
修饰全局变量:正常情况下(没有用static修饰)全局变量可以在定义它的文件中使用,也能在其它文件中使用(extern声明一下即可);
static修饰了全局变量,相当于限制了全局变量的作用范围(该全局变量只能用于定义的那个文件,其它文件不能使用,哪怕extern声明也不行)
修饰局部变量:(实际开发往往用来修饰统计变量) 表示这个局部变量只能被初始化一次;
第二种修饰函数
正常情况下(没有用static修饰)函数可以在定义它的文件中使用,也能在其它文件中使用(extern声明一下即可);
static修饰了函数,相当于限制了函数的作用范围(该函数只能用于定义的那个文件,其它文件不能使用,哪怕extern声明也不行);
(2)extern
第一种:声明外部的全局变量;
第二种:声明外部的函数 ;
(3)const
第一种:修饰常量(常量是只读,不能修改)
const int a=9; //定义了一个常量a;
第二种:修饰指针
int a=99;
写法一 const int *p=&a; //写法一和写法二是等价,表示这个指针不能修改它指向的地址中的内容(实际开发中,防止指针修改你地址中的内容)
写法二 int const *p=&a;
写法三 int *const p=&a; //p可以访问a的值,也能修改a的值,但是不能指向其它变量的地址(你可以认为p跟a的地址捆绑在一起了)
(4)typedef 类型重定义
作用:给C语言原本的数据类型改个名字(增强可读性,便于移植程序)
u8 --》类型没有见过 typedef unsigned char u8;
写法一:给基本数据类型换名字
typedef int zhengshu;
写法二:给指针换名字
公式: typedef 指针原本的定义;
typedef char *pp; //给char *换个名字叫做pp, pp不是变量名,是类型名
typedef char (*p)[10]; //给char (*)[10]数组指针换了名字,叫做p p不是变量名,是类型名
写法三:给数组换名字
公式: typedef 数组原本的定义;
typedef char buf[10]; //buf不是数组名,是类型名 char [10]类型
1 #include <stdio.h> 2 //把int换个名字 3 typedef int zhengshu; //zhengshu以后作为int直接使用 4 typedef char *pp; //pp以后可以作为char *类型直接使用 5 typedef char (*charpp)[10]; //charpp以后可以作为char (*)[10]类型直接使用 6 typedef int array[10]; //array以后可以作为int [10]类型直接使用 7 int main() 8 { 9 int a=99; 10 zhengshu b=88; //等价于int b; 11 printf("b is:%d\n",b); 12 13 //传统定义char *指针 char *p=buf; 14 char buf[10]="hello"; 15 pp p=buf; //char *p=buf 16 printf("p is:%s\n",p); 17 18 //传统定义char (*)[10] 19 charpp point=&buf; //char (*point)[10]=&buf 20 21 //传统定义数组 int c[10]; 22 array c; // int c[10] 23 c[0]=99; 24 c[1]=88; 26 }
C语言主函数传参
C语言主函数的写法:
void main()
int main()
int main(int argc,char **argv) // ./a.out hello hehe
int main(int argc,char *argv[])
argc --》参数个数、argv[0] --》第一个参数、argv[1] --》第二个参数。
注意:主函数传参,传递的参数默认当成字符串处理
原文地址:https://www.cnblogs.com/xiaojian98/p/12992612.html
- Intent 属性详解(下)
- 把复杂json解析成javabean思路:思路:
- Python数据科学计算库的安装和numpy简单
- 4G安全:研究人员发现攻击4G无线上网卡和SIM卡的方法
- Python文学化编程 - Jupyter notebook使用和插件拓展
- PoisonCake(毒蛋糕):内置于手机ROM的恶意代码模块
- Spring+SpringMVC+MyBatis整合
- Python之numpy数组学习(五)——广播
- WordPress再悲剧:WPcache-Blogger感染事件影响五万WordPress网站
- 浅谈神经机器翻译
- 窃取Facebook用户信息:利用Android同源策略漏洞的恶意应用被发现
- 关于React Native 安卓首屏白屏优化
- 浅谈spring security 403机制一、无权限访问二、匿名访问三、有权限访问原因机制指定AccessDeniedHandler指定error-page情景原因结论
- Python之numpy数组学习(二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android FTP 多线程断点续传下载上传的实例
- Android如何调用系统相机拍照
- Android开发之设置开机自动启动的几种方法
- Android图片等比例缩放和填充屏幕效果
- Android中自定义ImageView添加文字说明详解
- Android 中ThreadLocal的深入理解
- 100行Android代码轻松实现带动画柱状图
- Android编程绘图操作之弧形绘制方法示例
- 详解Android中Application设置全局变量以及传值
- Android编程调用红外线遥控功能示例
- Android实现图文垂直跑马灯效果
- Android 实现截屏功能的实例
- android仿微信通讯录搜索示例(匹配拼音,字母,索引位置)
- Android通过overScrollBy实现下拉视差特效
- Android使用手势实现翻页效果