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. iOS第三方类库JSPatch(热更新)

    ---------------------------------------------------------------------------------------------------- ...

  2. iOS 按钮小知识点总结

    //设置按钮里面图片和文字的间距 btn.titleEdgeInsets=UIEdgeInsetsMake(0, 20, 0, 0); button.imageEdgeInsets = UIEdgeI ...

  3. 多线程基础(五)NSThread线程通信

    5.多线程基础 线程间通信   什么叫线程间通信 在一个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信   线程间通信的体现 1个线程传递数据给另一个线程 在1个线程中执行完特定任务后, ...

  4. C++中的常量折叠

    先看例子: #include <iostream> using namespace std; int main() { ; int * p = (int *)(&a); *p = ...

  5. 长文件名导致的0x80070057

    今天遇到件怪事. 把一个视频集(86G)从电脑硬盘转移动硬盘的时候里面时报里面的两个文件夹里的视频和字幕不能复制 错误代码0x80070057 这个视频集是从校内PT是下下来的,电脑是联想Y560-w ...

  6. linux命令详解之挂载光驱的方法

    linux的硬件设备在/dev目录下,光驱也是其中./dev/cdrom表示光驱,挂载光驱的方法如下(以root身份): 代码如下: mkdir /mnt/cdrommount  -t auto  - ...

  7. 数据结构--树状数组&&线段树--基本操作

    随笔目的:方便以后对树状数组(BIT)以及基本线段树的回顾 例题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 例题:hdu 1166 敌兵布阵 T ...

  8. Linux学习之三——操作档案与目录

    一. 目录文档操作指令 1. pwd 显示目前所在目录 如果加上-P 的选项,则取得正确的目录名称,而不是以链接文件的路径来显示. 例如CentOS下,刚刚好/var/mail是/var/spool/ ...

  9. 关于 SSIS 并行foreach loop的一个设计思路

    SSIS 包在控制流方面的性能优化,主要是提高并行度. 可以设置并发线程数MaxConcurrentExecuteables. SSIS中的foreach loop container 不是并行执行任 ...

  10. HTML常用文本元素

    HTML是超文本标记语言,它提供网页的具体内容,包括文本.表单.图像.表格.链接.多媒体.列表等.其中文本是我们遇到的最多的展示内容.正确的使用文本标签,会使页面具有语义化,也有利于SEO. 文本标签 ...