1.当数组当作函数参数的时候会退化为指针

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. void sort(int a[]){
  5. int num = sizeof(a);
  6. printf("数组的大小num=%d\n", num);//打印4,此时a是一个指针
  7. //打印数组
  8. for (int i = ; i < ; i++)
  9. {
  10. printf("%5d", a[i]);
  11. }
  12. }
  13.  
  14. void main(){
  15. int a[] = {,,,,,,,,,};
  16. sort(a);
  17. system("pause");
  18. }

2.数据类型的本质上是固定内存大小的别名,数据类型的作用是编译器预算对象(变量)分配的内存空间大小

  1. //数据类型的本质
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4.  
  5. void main(){
  6. int b = ;//int数据类型表示:创建int型的变量需要在内存中分配4个字节大小的空间
  7. int a[] = {,,,,,,,,,};//int []数据类型表示:创建一个int型数组需要在内存中分配sizeof(int)*10=40个字节大小的空间
  8. char ch = 'a';//char数据类型表示:创建char型的变量需要在内存中分配1个字节大小的空间
  9. float fdata = 1.0;//float数据类型表示:创建float型的变量需要在内存中分配4个字节大小的空间
  10. short sdata = ;//short数据类型表示:创建short型的变量需要在内存中分配2个字节大小的空间
  11. double dd = 1.0;//double数据类型表示:创建double型的变量需要在内存中分配8个字节大小的空间
  12. char *p = NULL;//char *数据类型表示:创建char *型的指针变量需要在内存中分配4个字节大小的空间,
  13. //所以指针类型变量都是分配4个字节大小的内存空间
  14. //结构体,共用体则需要根据各自的特性去计算分配内存空间
  15. }

3.字符串常量因为c++编译器的优化,相同的字符串常量只会在代码去创建一个变量

4.头文件string.h下的strcpy()函数的本质,是将原来字符串str复制到新指针p所指向的内存空间,而不是将原来字符串str的地址赋值给新指针p,因此新指针p必须满足有对应的内存空间(即指针p必须有值)

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5.  
  6. void main(){
  7. char *p = NULL;
  8. char *p1 = NULL;
  9. strcpy(p, "asadf");//会报错 指针p是空指针,没有对应的内存空间,所以*p会直接读取0x000000的地址,而0x000000是系统专用
  10. //strcpy()的本质
  11. /*while (p=='\0'){
  12. *p = *p1;
  13. p++;
  14. p1++;
  15. }*/
  16. system("pause");
  17. }

5.对于动态分配的内存而言,并不支持单个内存单元的释放,只能释放整个动态内存

  1. //动态分配内存的释放
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5.  
  6. //定义数组大小
  7. #define N 10
  8.  
  9. void main(){
  10. //创建int类型数组
  11. int *p = (int *)malloc(sizeof(int)*N);
  12. for (int i = ; i < ; i++)
  13. {
  14. *(p + i) = i + ;
  15. }
  16. for (int i = ; i < ; i++)
  17. {
  18. printf("%5d", p[i]);
  19. }
  20. //对于动态分配的内存而言,并不支持单个内存单元的释放,只能释放整个动态内存
  21. //例如
  22. //free(p+1); 程序报错
  23. //释放动态内存,只能释放头指针
  24. free(p);
  25. //避免野指针,必须将P赋值NULL
  26. p = NULL;
  27.  
  28. system("pause");
  29. }

6.数组[]的本质是c/c++编译器帮我们做了一个*p的操作

  1. //数组[]的本质
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5.  
  6. //定义数组大小
  7. #define N 10
  8.  
  9. void main(){
  10. //定义数组
  11. int arr[N] = { ,,,,,,,, };
  12. //定义数组指针
  13. int *p = arr;
  14. //[]取值方式
  15. for (int i = ; i < N; i++)
  16. {
  17. printf("%5d",arr[i]);
  18. //arr是一个指针;arr[i]===>arr[0+i]===>*(arr+i)
  19. }
  20. printf("\n");
  21. //指针取值方式
  22. for (int i = ; i < N; i++)
  23. {
  24. printf("%5d", *(p+i));
  25. }
  26. printf("\n");
  27. //总结:
  28. //*p是程序员手动的使用指针去完成间接取值(赋值)
  29. //[]是c/c++编译器帮我们做了一个*p的操作
  30. system("pause");
  31. }

C语言 日常小结的更多相关文章

  1. C语言 指针小结

    指针 -->指针变量 类型名 *变量名 int *point1; char *point2; 注意:*p可以直接使用,它代表指针p指向的变量,*p可以当做被指向的变量使用!~~~~ 一个变量的地 ...

  2. go语言 hello 小结

    在编译go语言的时候: 写了一段这样的代码 package main import "fmt" func main() {     fmt.Println("Hello, ...

  3. 2014.3.11-C语言学习小结

    文件操作: 知识点: 持久化 1.文本文件的读写 2.二进制文件的读写 3.缓冲文件系统 1.打开文件 2.读写文件 3.保存 4.关闭文件 ============================= ...

  4. 2014.3.5-C语言学习小结

    知识点: 1.结构体 struct 2.联合体 union 3.枚举 4.结构.联合与函数 =========================== 结构体 思考:如果现在希望保存一个学生的信息,该如何 ...

  5. R语言画图小结

    本文以1950年到2010年期间我国的火灾统计数据为例,数据如下所示: (0)加载数据 data<-read.csv("E:\\MyDocument\\p\\Data\\1950~20 ...

  6. 李洪强漫谈iOS开发[C语言-053]-小结

    /* 已经学习过的C语言语法 01 基本C程序结构 int main (void) int main(int argc,char *arv){...} 02 基本语句(输入输出) 基本头文件: #in ...

  7. Golang语言细节小结

    前段时间,看了菜鸟入门,较浅的认识一下golang的语法习惯和规则,然后跟别人做了个爬虫项目,但是对于golang语言的语法结构还不是很懂.又看了遍<go实战>第二章. 构建程序在构建可执 ...

  8. C/C++语言 预处理小结

    预处理功能主要包括宏定义,文件包含,条件编译三部分.分别对应宏定义命令,文件包含命令,条件编译命令三部分实现. 预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换.预处理 ...

  9. 2014.3.6-C语言学习小结

    链表基础: 知识点: 1.链表基础 2.节点的创建和添加 llist_append_node 3.链表的遍历 llist_print_each 4.链表的查找与修改 5.链表的插入与删除 6.链表的销 ...

随机推荐

  1. 在Eclipse设置打开项目或文件目录

      Run-->External Tools-->Open External Tools Dialog... new 一个 program location 里面填 :C:\WINDOWS ...

  2. android media server 解析1-media player service 结构部分

    下面为media server注册的四个服务之一:MediaPlayerService的结构图 1.图中没有MediaPlayerService的代理对象BpMediaPlayerService部分, ...

  3. Monyer's game Google Hack关的BT玩法

    玩Monyer's game的朋友都知道里面有Google Hack这关,其实这里本来应该用到的技术是逆向回溯搜索,但因为有好几个人都说利用其他方式看到的密码,所以Monyer不得不重新站在玩家的角度 ...

  4. 远程连接mysql容易遇到的2个问题

    1."com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The las ...

  5. 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] ------------------------------------------------------------- ...

  6. TCP面向连接网络编程

    一 TCP&UDP协议 TCP,Tranfer Control Protocol,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对 ...

  7. linux常用查看日志命令

    转自:http://yinfeifei.iteye.com/blog/779217 1.cat命令: 功能:1)显示整个文件. 示例: $ cat fileName 2)把文件串连接后传到基本输出,如 ...

  8. MyEclipse 6.5 代码自动提示功能配置教程

    1. 打开MyEclipse 6.0.1,然后“window”→“Preferences” 2. 选择“java”,展开,“Editor”,选择“Content Assist”. 3. 选择“Cont ...

  9. std::list

    1遍历 std::list<TYPE*>::const_iterator iter_list; for (iter_list = my_list.begin(); iter_list != ...

  10. 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 ...