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.链表的销 ...
随机推荐
- 关于https的Error:Error Domain=NSURLErrorDomain Code=-1012
昨天闲着没事就随便搞点demo,随便找了一个https的接口,运行之后,一直发现Error Domain=NSURLErrorDomain Code=-1012.好奇怪,请求https的配置我基本都配 ...
- UITextField 基本属性使用
//设置文本框 透明度 tf.alpha = ; //设置文本颜色 tf.textColor = [UIColor orangeColor]; //设置文本文字 格式 tf.font = [UIFon ...
- Saiku 下载,安装
Saiku是一个模块化的开源分析套件,它提供轻量级的OLAP(联机分析处理),并且可嵌入.可扩展.可配置. 主页:http://community.meteorite.bi 如何安装摘自: http: ...
- 转 Android中shape中的属性大全
<shape> <!-- 实心 --> <solid android:color="#ff9d77"/&g ...
- Intelli IDEA ultimate破解方法
今天装了个Intelli IDEA,ultimate版本,使用网上方法破解了,破解方法参考网址 http://appcode.aliapp.com/idea.jsp Intelli IDEA有个vi ...
- mysql 命令行
drop database mustang; create database mustang; show databases; use database mustang; show tables; s ...
- SAM4E单片机之旅——16、NAND Flash读写
这次大概介绍了一下NAND Flash,以及在ASF中使用它的方法. 一. 接线 这个开发板搭载了一个256 MB,8位的NAND Flash(MT29F2G08ABAEA).引脚接线如下: 偷个懒, ...
- tomcat 部署脚本
将一下3个脚本放到一个目录里,做成一个 python 的包即可使用 脚本介绍 操作服务脚本 #!/usr/bin/env python # _*_coding:utf-8_*_ # Author: & ...
- Storm wordcount Read from file
source code: package stormdemo; import java.io.BufferedReader; import java.io.BufferedWriter; import ...
- noip2008普及组4题题解-rLq
(啊啊啊终于补到了今天的作业了) 本题地址:http://www.luogu.org/problem/show?pid=1058 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣 ...