00深入理解C指针之--- 指针之外
该系列文章源于《深入理解C指针》的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教。
C语言从诞生之初就非常善于和硬件打交道,经过这么多年的发展之后,其灵活性和超强的特征是受到几乎所有程序员的肯定。C语言的这种灵活性很大一部分程度来源与C指针,指针为C语言动态操控内存提供了支持,同时也便于访问硬件。由于编程的本质就是操控数据,而数据大多都在内存中,理解C管理内存的工作原理,就显得尤为重要了。知道malloc()函数能够从堆上申请内存,理解内存分配的本质则是另外的事。
C语言中掌握指针的意义:
1、撰写快速高效的代码
2、方便解决问题的途径
3、支持内存灵活的分配
4、使得表达异常的简洁
5、减少传递数据的开销
6、保护函数传递的数据
7、实现函数强大的回调
8、拥有数据万能的结合
C语言中指针的用途:
1、动态操控内存:2章、 3.1章
2、灵活数据传输:3.2章、
3、方便数据转型:类型定义、指针转换
4、统一数据存储:系统层面、内存组织
5、实现硬件访问:8.1章、 8.2章
6、强化数据结构:3.3章、 4章、 5章、 6章、 8.3章、 8.4章
编程的本质是操控数据,包括数组的组织和数据的操作,除了特殊的算法外,算法也是操作数据的范畴。数据操作需要计算机中CPU和内存的介入,CPU主要完成数据的计算:算术运算、逻辑运算、浮点运算,包括数据的传递方向和传递时机等。
指针:存放有内存地址的变量;
理解C指针:理解C语言组织内存方式(静);理解C程序管理内存方式(动);必须理解C语言的内存模型
C语言内存模型:操作系统(类型和架构)和编译器(厂商和版本)
变量和内存:变量做为计算中内存地址的别称,主要是给人看的;变量的三要素:类型和值
请看代码例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc, char **argv)
{
typedef struct student{
char name[];
char class[];
char sex[];
int age;
//char zhu
} Student; Student stu;
strcpy(stu.name, "zhangsan");
strcpy(stu.class, "A1411");
strcpy(stu.sex, "na");
//stu.zhu = 'n';
stu.age = ; printf("The stu information: \n");
printf("Name:\t%s;\n", stu.name);
printf("Class:\t%s;\n", stu.class);
printf("Sex:\t%s;\n", stu.sex);
printf("Age:\t%d;\n", stu.age);
//printf("Zhu:\t%c;\n", stu.zhu); printf("The struct stu'size is %d\n", sizeof(Student)); return ;
}
保留12、19、27行的代码的执行结果:
The stu information:
Name: zhangsan;
Class: A1411;
Sex: na;
Age: 19;
Zhu: n;
The struct stu'size is 28
其中12行代码和11行代码交换后执行结果:
The stu information:
Name: zhangsan;
Class: A1411;
Sex: na;
Age: 19;
Zhu: n;
The struct stu'size is 24
注释12、19、27行的代码的执行结果
The stu information:
Name: zhangsan;
Class: A1411;
Sex: na;
Age: 19;
The struct stu'size is 24
唯一的区别就是在结构体中增加了一个char型字符,但是结构体的大小增加了四个。
这个例子充分说明想学好C语言,必须搞定C语言中计算机的内存分配的原理和机制,否则C语言总是一知半解的。
00深入理解C指针之--- 指针之外的更多相关文章
- 理解C语言中指针的声明以及复杂声明的语法
昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...
- 02深入理解C指针之---指针类型和值
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 1.指针的类型: 可以在声明指针时,指定指针的类型,例如: (1)void *x 声 ...
- 06深入理解C指针之---指针操作和比较
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则.本节内容中指针的操 ...
- 10深入理解C指针之---指针运算和比较
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针运算有很多种,主要有指针的声明*.指针的解引*.指针指向(*).或->.指针 ...
- 这样子来理解C语言中指针的指针
友情提示:阅读本文前,请先参考我的之前的文章<从四个属性的角度来理解C语言的指针也许会更好理解>,若已阅读,请继续往下看. 我从4个属性的角度来总结了C语言中的指针概念.对于C语言的一个指 ...
- 从四个属性的角度来理解C语言的指针也许会更好理解
文章会在文末更新! 关于指针是什么,很多教材已经作出了定义,大多数都会定义为"存放变量内存地址的变量".从这句话中我觉得除了让我知道这个定义有11个字以外,其他就没什么用了.我个人 ...
- 理解git 中的HEAD指针&branch指针
理解git 中的HEAD指针&branch指针 Yooye关注 2019.02.28 10:44:32字数 492阅读 668 HEAD指针 使用git checkout 来移动HEAD指针, ...
- 深入理解C语言-函数指针
函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作. 函数类型基础 函数三要素: 名称.参数.返回值 C语言中的函数有 ...
- 深入理解C语言-二级指针三种内存模型
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...
随机推荐
- [bzoj1912]异象石(set)
Description Adera是Microsoft应用商店中的一款解谜游戏. 异象石是进入Adera中异时空的引导物,在Adera的异时空中有一张地图.这张地图上有N个点,有N-1条双向边把它们连 ...
- Android设为系统默认的短信应用
要设为系统默认的短信应用首先要配置一下AndroidManifest.xml文件,添加下列: <!-- BroadcastReceiver that listens for incoming S ...
- 5.2 pandas 常用函数清单
文件读取 df = pd.read_csv(path='file.csv') 参数:header=None 用默认列名,0,1,2,3... names=['A', 'B', 'C'...] 自定义列 ...
- TCP/IP网络编程之多种I/O函数
send和recv函数 在之前的学习中,我们在不少示例中用到send和recv这两个函数,但一直没有详细解释过着两个函数中每个参数的含义.本节将介绍Linux平台下的send&recv函数 # ...
- MySQL基础2-创建表和主键约束
1.创建表 在操作数据表之前,应该使用"USE 数据库名"指定操作是在哪个数据库中进行 主键约束(唯一标识) ****非空*** ****唯一*** ****被引用****(学习外 ...
- windows下git安装以及基本配置
一.首先要下载git然后进行默认安装即可,然后查看系统环境变量是否添加 二.桌面右击鼠标,选择git bash 进入操作页面 git --version 检测是否安装成功 安装完成有配置一 ...
- python矩阵和向量的转置问题
numpy有很多方法进行转置,这里由于时间和精力限制(主要是我实在比较懒,有一个基本上一直能使的,就懒得看其他的了),其他方法我没研究,这里我总结的东西,如果有问题,欢迎各路大佬拍砖 一.创建矩阵: ...
- caffe工程配置问题
一开始是碰到没有caffe/caffe.hpp文件的问题,不知道怎么弄.通过百度,知道了在makefile文件里加入头文件路径和库文件路径就行. 首先是caffe.pb.h丢失问题,解决方法:http ...
- 目前问题:plupload上传带参数到后台
目前问题:plupload上传带参数到后台,迟迟没有解决!!! 昨晚到23点多终于完成了! 直接上代码! var uploader = new plupload.Uploader({ //实例化一个p ...
- CH Round #59 - OrzCC杯NOIP模拟赛day1
第一题:队爷的新书 题意简述:给定n个闭区间,求出一个数p使它与包含它的区间数的积最大,输出这个积. 分析:使用一个差分数组g,每个区间[l,r],l位置加1,r+1的位置减1,从前往后统计,得到对于 ...