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语言 日常小结的更多相关文章

  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. Xcode证书路径和缓存清理路径

    1.Xcode证书路径: ~/Library/MobileDevice/Provisioning Profiles 2.Jenkines共享证书路径: /用户/共享/Jenkins/Library/M ...

  2. 二叉查找树(binary search tree)详解

    二叉查找树(Binary Search Tree),也称二叉排序树(binary sorted tree),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有结点的值均小于 ...

  3. 限制UITextField输入内容的长度

    一.前言 今天做手机号输入限制长度,例如我的textfield只能输入11位,如果再多输入的话就不再textfield中显示,只显示11位的手机号. 如果用ReactiveCocoa的话,这个很好解决 ...

  4. iOS 开发 - 改善APP的流畅度 (绘制股票行情)

    这几天做了一个查看股票行情的app. 完成之后,当k线比较多的时候,app 对于捏合.拖动手势的反应不太流畅, 主要原因是drawRect: 干的活太多, 竟然需要40ms+, fps 自然不高 最后 ...

  5. MySQL学习总结(摘抄)

    1.数据库概述 简 而言之,数据库(DataBase)就是一个存储数据的仓库.为了方便数据的存储和管理,将数据按照特定的规律存储在磁盘上.通过数据库管理系统,可以有 效的组织和管理存储在数据库中的数据 ...

  6. android基础开发之WebView

    WebView 是android平台沟通 http & H5 页面的桥梁. 但是google对这块的表述不是很清晰,而且SDK里面基本看不到源码,只有一个接口而已. 传送:http://dev ...

  7. bootstrap3 兼容IE8浏览器

    近期在使用bootstrap这个优秀的前端框架,这个框架非常强大,框架里面有下拉菜单.按钮组.按钮下拉菜单.导航.导航条.面包屑.分页.排版.缩略图.警告对话框.进度条.媒体对象等,bootstrap ...

  8. Mysql中的触发器

    什么是触发器 简单的说,就是一张表发生了某件事(插入.删除.更新操作),然后自动触发了预先编写好的若干条SQL语句的执行: 特点及作用 特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原 ...

  9. openstack kilo compute更新后报错IncompatibleObjectVersion: Version 1.2 of PciDeviceList is not supported

    前几天在compute节点更新openstack的包后,发现报错IncompatibleObjectVersion: Version 1.2 of PciDeviceList is not suppo ...

  10. olacle数据库员工表的创建,及插入数据,添加约束,删除列,查询数据的sql语句

    ---删除原有的员工表drop TABLE employee;---创建员工表CREATE TABLE employee       (       empno NUMBER(4) NOT NULL, ...