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. 【原】训练自己的haar-like特征分类器并识别物体(3)

    在前两篇文章中,我介绍了<训练自己的haar-like特征分类器并识别物体>的前三个步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本描述文件 3.训练样本 4.目标识别 == ...

  2. iOS闹钟实现

    UILocalNotification *notification=[[UILocalNotification alloc] init];         if (notification!=nil) ...

  3. iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

    1.表单键盘遮挡 应用场景为一个collectionView上有多个textfield.textView供用户填写信息. 之前输入项较少时,采取的方法比较粗暴,didSelectItemAtIndex ...

  4. android 音乐播放器简单实现

    package com.zhangbz.musicplayer; import java.io.File; import android.app.Activity; import android.me ...

  5. C语言-12-日期和时间处理标准库详细解析及示例

    概述 标准库 提供了用于日期和时间处理的结构和函数 是C++语言日期和时间处理的基础 与时间相关的类型 clock_t,本质是:unsigned long typedef unsigned long ...

  6. 关于在Xcode的OC工程中相对路径失败的原因

    Xcode的工程生成的可执行文件不是默认在源文件同一个目录下面的,所以当可执行文件执行的时候,相对路径就不对了. 这一点用终端直接编译执行文件证明了这一点: clang -fobjc-arc -fra ...

  7. Oracle定义varchar2()类型存储汉字的长度问题

    varchar2最大是4000字节,那么就看你的oracle字符集:(select userenv('language') from dual;)如果字符集是16位编码的,ZHS16GBK,那么每个字 ...

  8. Effective Java 78 Consider serialization proxies instead of serialized instances

    Serialization proxy pattern private static nested class (has a single constructor whose parameter ty ...

  9. 仅IE6中链接A的href为javascript协议时不能在当前页面跳转

    切页面时有时用链接A来替代按钮,这样做有几个好处 鼠标放上时默认有手状效果(不用添加cursor:pointer) 可以添加低版本IE都支持的伪类 如果点击时页面要整体刷新,即跳转,这时IE6则不尽人 ...

  10. python 标准库和第3方库的介绍

    忘了从哪里来的了~~~~ Tkinter———— Python默认的图形界面接口.Tkinter是一个和Tk接口的模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组.T ...