C语言总结2
12).预处理指令
1. 什么叫做预处理代码.
以#开头的代码就是预处理代码 #warning #import
2. 手写1个C程序的步骤.(面试题)
1>编写代码
2>编译
1)执行.c中的预处理代码
2)检查语法
3>链接
4>执行
3. 预处理指令的分类.(面试题) ******
1>文件包含指令 #include
2>宏定义 #define (用来替换代码)
3>条件编译 #if (满足一定的条件才编译)
4. 预处理指令的特点.
1>都是以#开头
2>后面没有分号
3>在编译的时候,检查语法之前进行
"注意
以#开头的代码就是预处理代码
13).sizeof运算符
sizeof运算符的作用?
作用:计算常量,变量在当前系统上内存中所占的字节数
sizeof (数据类型)
sizeof (变量)-----用的最多!
sizeof (常量)
注意,
char类型的变量在内存中占1个字节;
char类型的常量在内存中占4个字节;
综上所述,为了安全起见,sizeof后面最好加上括号!
14).按位异或
^ 异或运算
不同为1,相同为0
注意:
1 相同整数相^的结果是0;
2 一个整数^另一个整数2次结果不变 ; 3^2^2 = 3
3 整数相^跟顺序无关 3^2^3 = 2^3^3 = 2
15). 按位左移或者右移
1,按位左移运算. <<
参与按位左移运算的二进制数据. 向左移动指定的位数. 低位不够补0 高位溢出就丢弃
2,按位右移. >>
参与按位右移的二进制数据.向右移动指定的位数. 低位溢出丢弃,高位补符号位.
左移
1). 左移运算有可能会改变其正负性.
2). 将1个数左移n位,相当于将这个数乘以2的n次方.
右移
1). 右移运算不会改变正负性.
2). 将1个数按位右移n位.相当于这个数除以2的n次方.
16).深入变量的细节
一,变量在内存中的存储
1,在为变量分配字节空间的时候,是从高地址向低地址分配的
2,存储的时候,是低位存储在低字节,高位存储在高字节.
二,变量的地址
3,变量的地址是组成这个变量的低字节的地址.
4,使用&取地址可以取出变量的地址
17).数组地址问题
1.数组的地址 == 数组名 == 数组中的低字节的地址 == 数组中下标为0的元素的地址 == 数组中下标为0的元素的低字节的地址.
2,使用 %p 来打印数组名
18).二维数组与函数
1,当二维数组作为函数的参数的时]候.会丢失这个二维数组的行数和列数,解决方案是把行数和列数传递过来
2,当二维数组作为函数的参数的时候,要保证实参二维数组的列数必须要和形参二维数组的列数一致.
一个一劳永逸的方法是,写参数的时候,先写行数和列数,最后再写二维数组,然后二维数组的列数用参数指定.
void test2(int rows,int cols,int arr[][cols]);
19). 使用字符数组存储字符串注意的地方
1). 如果没有指定数组的长度.,那么数组的长度就为字符串的长度+1
2). 如果指定了长度,字符数组的长度就是指定的长度
3). 如果指定的字符数组的长度小于等于了字符串的长度,这个时候就会有问题了.
就会出现存储不下的情况.(不要指定长度)
4). 如果在声明1个字符数组的同时我们就初始化1个字符数据给这个数组,
那么这个时候是可以用中文.
20).指针
指针是一个数据类型,这数据类型可以用来定义变量,定义什么变量,指针变量,那这个指针变量是用来干什么的,专门用来保存地址的!
block是一个数据类型,这数据类型可以用来定义变量,定义的这个变量用来保存一段代码块!!
21). 指针作为函数的参数
1,指针作为函数的参数,在函数的内部去访问参数指针指向的变量的时候,其实访问的就是实参变量.
2, 指针作为函数的参数,可以实现什么效果?
函数的内部可以修改实参变量的值.
3. 什么时候需要将指针作为函数的参数?
当函数需要返回多个数据的时候就可以使用指针作为函数的参数.
如何实现的?
使用指针作为函数的参数. 让调用者将自己的变量的地址传递到函数的内部
函数的内部通过指针就可以修改实参变量的值.
4,返回数组最大值和最小值的思路
1>让调用者传递两个变量的地址给我.
2>让调用者自己先准备两个变量.然后将这两个变量的地址给我.
3>函数内部是不是可以通过指针 直接 修改 调用者的变量的值.
*pMax = max; //把最大值赋值给pMax指针指向的变量.
*pMin = min;//把最小值赋值给pMin指针指向的变量.
22).指针为什么要分类型
1, 指针变量的类型决定了 通过这个指针找到字节以后 连续操作多少个字节空间.
2, 指针的类型如果不和指向的变量的类型相同话. 那么通过指针就无法正确的操作指向的变量.
注意:
p1[n] = *(p1+n); 前提是p1是1个指针变量.
C语言总结2的更多相关文章
- C语言 · 高精度加法
问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...
- Windows server 2012 添加中文语言包(英文转为中文)(离线)
Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- C语言 · Anagrams问题
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...
- C语言 · 字符转对比
问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...
- JAVA语言中的修饰符
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
- Atitit 项目语言的选择 java c#.net php??
Atitit 项目语言的选择 java c#.net php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- InstallShield 脚本语言学习笔记
InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加. 一.基本语法规则 ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
随机推荐
- sql点滴42—mysql中的时间转换
原文:sql点滴42-mysql中的时间转换 UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时 ...
- DDD分层架构之值对象(介绍篇)
DDD分层架构之值对象(介绍篇) 前面介绍了DDD分层架构的实体,并完成了实体层超类型的开发,同时提供了验证方面的支持.本篇将介绍另一个重要的构造块——值对象,它是聚合中的主要成分. 如果说你已经在使 ...
- WEB浏览器与服务器通讯过程
以访问网页www.baidu.com为例,下面是使用Wireshark捕捉到的数据: 浏览器先发起一个TCP连接,然后发送GET报文给服务器,服务器之后返回一个Response报文. 从服务器端返回时 ...
- Sql Server 自定义数据类型
SQLServer 提供了 25 种基本数据类型: ·Binary [(n)] 二进制数据 既可以是固定长度的(Binary),也可以是变长度的.其中,n 的取值范围是从 1 到 8000.其存储窨 ...
- Visual Studio 2015 & C#6.0 试用报告,持续更新。
昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不提,C#常年被人指责跨平台性不佳,我也是无能为力.即使有Mono等第三方跨平台工程,.NET ...
- JavaScipt中对DOM的理解
一.理解DOM 浏览器通过文档对象模型DOM使JavaScript程序可以访问页面上的元素,而DOM是页面上XHTML中文档正文标题.段落.列表.样式ID.class以及所有其他出现的数据的一个内部表 ...
- git简单教材
0)初始化 $ git config --global user.name "xxx" $ git config --global user.email "xxx@gma ...
- .NET 相依性注入
发布<.NET 依賴注入>电子书 beta 版 书籍进度 本书目前已经开始发行 beta 版,完成进度约 70%.(我希望这本书不要超过 200 页,目前看起来应该没问题.) 简介 本书内 ...
- Google Dataflow
十分钟了解分布式计算:Google Dataflow 介绍 Google Cloud Dataflow是一种构建.管理和优化复杂数据处理流水线的方法,集成了许多内部技术,如用于数据高效并行化处理的Fl ...
- Linux 下安装 SVN服务器
前段时间换了一个新项目组.过去发现居然SVN都没有.代码都是手动对比存档.当时就蛋疼了.这他妈也太苦逼了.话不多说,要来测试服务器地址.开工了.由于服务器不能连接外网. 1.先下载安装包.本次安装不结 ...