C语言 日常小结
1.当数组当作函数参数的时候会退化为指针
- #include<stdio.h>
- #include<stdlib.h>
- void sort(int a[]){
- int num = sizeof(a);
- printf("数组的大小num=%d\n", num);//打印4,此时a是一个指针
- //打印数组
- for (int i = ; i < ; i++)
- {
- printf("%5d", a[i]);
- }
- }
- void main(){
- int a[] = {,,,,,,,,,};
- sort(a);
- system("pause");
- }
2.数据类型的本质上是固定内存大小的别名,数据类型的作用是编译器预算对象(变量)分配的内存空间大小
- //数据类型的本质
- #include<stdio.h>
- #include<stdlib.h>
- void main(){
- int b = ;//int数据类型表示:创建int型的变量需要在内存中分配4个字节大小的空间
- int a[] = {,,,,,,,,,};//int []数据类型表示:创建一个int型数组需要在内存中分配sizeof(int)*10=40个字节大小的空间
- char ch = 'a';//char数据类型表示:创建char型的变量需要在内存中分配1个字节大小的空间
- float fdata = 1.0;//float数据类型表示:创建float型的变量需要在内存中分配4个字节大小的空间
- short sdata = ;//short数据类型表示:创建short型的变量需要在内存中分配2个字节大小的空间
- double dd = 1.0;//double数据类型表示:创建double型的变量需要在内存中分配8个字节大小的空间
- char *p = NULL;//char *数据类型表示:创建char *型的指针变量需要在内存中分配4个字节大小的空间,
- //所以指针类型变量都是分配4个字节大小的内存空间
- //结构体,共用体则需要根据各自的特性去计算分配内存空间
- }
3.字符串常量因为c++编译器的优化,相同的字符串常量只会在代码去创建一个变量
4.头文件string.h下的strcpy()函数的本质,是将原来字符串str复制到新指针p所指向的内存空间,而不是将原来字符串str的地址赋值给新指针p,因此新指针p必须满足有对应的内存空间(即指针p必须有值)
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- void main(){
- char *p = NULL;
- char *p1 = NULL;
- strcpy(p, "asadf");//会报错 指针p是空指针,没有对应的内存空间,所以*p会直接读取0x000000的地址,而0x000000是系统专用
- //strcpy()的本质
- /*while (p=='\0'){
- *p = *p1;
- p++;
- p1++;
- }*/
- system("pause");
- }
5.对于动态分配的内存而言,并不支持单个内存单元的释放,只能释放整个动态内存
- //动态分配内存的释放
- #include<stdio.h>
- #include<stdlib.h>
- //定义数组大小
- #define N 10
- void main(){
- //创建int类型数组
- int *p = (int *)malloc(sizeof(int)*N);
- for (int i = ; i < ; i++)
- {
- *(p + i) = i + ;
- }
- for (int i = ; i < ; i++)
- {
- printf("%5d", p[i]);
- }
- //对于动态分配的内存而言,并不支持单个内存单元的释放,只能释放整个动态内存
- //例如
- //free(p+1); 程序报错
- //释放动态内存,只能释放头指针
- free(p);
- //避免野指针,必须将P赋值NULL
- p = NULL;
- system("pause");
- }
6.数组[]的本质是c/c++编译器帮我们做了一个*p的操作
- //数组[]的本质
- #include<stdio.h>
- #include<stdlib.h>
- //定义数组大小
- #define N 10
- void main(){
- //定义数组
- int arr[N] = { ,,,,,,,, };
- //定义数组指针
- int *p = arr;
- //[]取值方式
- for (int i = ; i < N; i++)
- {
- printf("%5d",arr[i]);
- //arr是一个指针;arr[i]===>arr[0+i]===>*(arr+i)
- }
- printf("\n");
- //指针取值方式
- for (int i = ; i < N; i++)
- {
- printf("%5d", *(p+i));
- }
- printf("\n");
- //总结:
- //*p是程序员手动的使用指针去完成间接取值(赋值)
- //[]是c/c++编译器帮我们做了一个*p的操作
- system("pause");
- }
C语言 日常小结的更多相关文章
- C语言 指针小结
指针 -->指针变量 类型名 *变量名 int *point1; char *point2; 注意:*p可以直接使用,它代表指针p指向的变量,*p可以当做被指向的变量使用!~~~~ 一个变量的地 ...
- go语言 hello 小结
在编译go语言的时候: 写了一段这样的代码 package main import "fmt" func main() { fmt.Println("Hello, ...
- 2014.3.11-C语言学习小结
文件操作: 知识点: 持久化 1.文本文件的读写 2.二进制文件的读写 3.缓冲文件系统 1.打开文件 2.读写文件 3.保存 4.关闭文件 ============================= ...
- 2014.3.5-C语言学习小结
知识点: 1.结构体 struct 2.联合体 union 3.枚举 4.结构.联合与函数 =========================== 结构体 思考:如果现在希望保存一个学生的信息,该如何 ...
- R语言画图小结
本文以1950年到2010年期间我国的火灾统计数据为例,数据如下所示: (0)加载数据 data<-read.csv("E:\\MyDocument\\p\\Data\\1950~20 ...
- 李洪强漫谈iOS开发[C语言-053]-小结
/* 已经学习过的C语言语法 01 基本C程序结构 int main (void) int main(int argc,char *arv){...} 02 基本语句(输入输出) 基本头文件: #in ...
- Golang语言细节小结
前段时间,看了菜鸟入门,较浅的认识一下golang的语法习惯和规则,然后跟别人做了个爬虫项目,但是对于golang语言的语法结构还不是很懂.又看了遍<go实战>第二章. 构建程序在构建可执 ...
- C/C++语言 预处理小结
预处理功能主要包括宏定义,文件包含,条件编译三部分.分别对应宏定义命令,文件包含命令,条件编译命令三部分实现. 预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换.预处理 ...
- 2014.3.6-C语言学习小结
链表基础: 知识点: 1.链表基础 2.节点的创建和添加 llist_append_node 3.链表的遍历 llist_print_each 4.链表的查找与修改 5.链表的插入与删除 6.链表的销 ...
随机推荐
- 在Eclipse设置打开项目或文件目录
Run-->External Tools-->Open External Tools Dialog... new 一个 program location 里面填 :C:\WINDOWS ...
- android media server 解析1-media player service 结构部分
下面为media server注册的四个服务之一:MediaPlayerService的结构图 1.图中没有MediaPlayerService的代理对象BpMediaPlayerService部分, ...
- Monyer's game Google Hack关的BT玩法
玩Monyer's game的朋友都知道里面有Google Hack这关,其实这里本来应该用到的技术是逆向回溯搜索,但因为有好几个人都说利用其他方式看到的密码,所以Monyer不得不重新站在玩家的角度 ...
- 远程连接mysql容易遇到的2个问题
1."com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The las ...
- maven 错误No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------- ...
- TCP面向连接网络编程
一 TCP&UDP协议 TCP,Tranfer Control Protocol,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对 ...
- linux常用查看日志命令
转自:http://yinfeifei.iteye.com/blog/779217 1.cat命令: 功能:1)显示整个文件. 示例: $ cat fileName 2)把文件串连接后传到基本输出,如 ...
- MyEclipse 6.5 代码自动提示功能配置教程
1. 打开MyEclipse 6.0.1,然后“window”→“Preferences” 2. 选择“java”,展开,“Editor”,选择“Content Assist”. 3. 选择“Cont ...
- std::list
1遍历 std::list<TYPE*>::const_iterator iter_list; for (iter_list = my_list.begin(); iter_list != ...
- Redhat6.5 安装64位oracle11.2.0.1
系统架构 [root@localhost ~]# uname -a Linux db 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 ...