C primer plus自用知识点整理(第十二章)存储类别、链接和内存管理
发布日期:2022-01-20 01:07:13 浏览次数:1 分类:技术文章

本文共 3924 字,大约阅读时间需要 13 分钟。

书籍整理内容:

最近在看C primer plus(加深巩固自己的C语言技巧,为以后学习C++打个基础)。
里面知识针对自己以后要查的点整理出来。
使用工具:visual studio 2013
:https://blog.csdn.net/answerMack/article/details/103766020
:https://blog.csdn.net/answerMack/article/details/103805900
:https://blog.csdn.net/answerMack/article/details/103855794
:https://blog.csdn.net/answerMack/article/details/103870182
https://blog.csdn.net/answerMack/article/details/103891048
https://blog.csdn.net/answerMack/article/details/103953376
https://blog.csdn.net/answerMack/article/details/103978471
:https://blog.csdn.net/answerMack/article/details/104114028
:https://blog.csdn.net/answerMack/article/details/105222269

目录

本章主要讲解概念、基本都是函数的文字讲解。注意一下就好,易困!!

在这里插入图片描述

作用域

作用域描述程序中可访问标识符的区域

(1)块作用域:
在这里插入图片描述
(2)函数作用域
在这里插入图片描述
(3)函数原型作用域
在这里插入图片描述
(4)文件作用域

在这里插入图片描述

(6)翻译单元和文件
在这里插入图片描述

链接

c变量的属性:外部链接、内部链接、无链接

在这里插入图片描述
在这里插入图片描述

存储期

在这里插入图片描述

在这里插入图片描述

存储类别

在这里插入图片描述

自动变量

在这里插入图片描述

在这里插入图片描述

寄存器变量

在这里插入图片描述

在这里插入图片描述

块作用域静态变量

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

外部链接静态变量

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

定义变量、声明变量

在这里插入图片描述

在这里插入图片描述

内部链接静态变量

在这里插入图片描述

多文件

在这里插入图片描述

存储类别说明符

auto

register
static
extern
_Thread_local
typedef
在这里插入图片描述
在这里插入图片描述
例子:

// parta.c --- various storage classes// compile with partb.c#include 
void report_count();void accumulate(int k);int count = 0; // file scope, external linkageint main(void){
int value; // automatic variable register int i; // register variable printf_s("Enter a positive integer (0 to quit): "); while (scanf_s("%d", &value) == 1 && value > 0) {
++count; // use file scope variable for (i = value; i >= 0; i--) accumulate(i); printf_s("Enter a positive integer (0 to quit): "); } report_count(); return 0;}void report_count(){
printf_s("Loop executed %d times\n", count);}
// partb.c -- rest of the program// compile with parta.c#include 
extern int count; // reference declaration, external linkagestatic int total = 0; // static definition, internal linkagevoid accumulate(int k); // prototypevoid accumulate(int k) // k has block scope, no linkage{
static int subtotal = 0; // static, no linkage if (k <= 0) {
printf_s("loop cycle: %d\n", count); printf_s("subtotal: %d; total: %d\n", subtotal, total); subtotal = 0; } else {
subtotal += k; total += k; }}

在这里插入图片描述

在这里插入图片描述

存储类别和函数

在这里插入图片描述

随机数函数和静态变量

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

掷骰子

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分配内存:malloc()和free()

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3种创建数组的方法

在这里插入图片描述

在这里插入图片描述

/* dyn_arr.c -- dynamically allocated array */#include 
#include
/* for malloc(), free() */int main(void){
double * ptd; int max; int number; int i = 0; puts("What is the maximum number of type double entries?"); if (scanf_s("%d", &max) != 1) {
puts("Number not correctly entered -- bye."); exit(EXIT_FAILURE); } ptd = (double *)malloc(max * sizeof(double)); if (ptd == NULL) {
puts("Memory allocation failed. Goodbye."); exit(EXIT_FAILURE); } /* ptd now points to an array of max elements */ puts("Enter the values (q to quit):"); while (i < max && scanf_s("%lf", &ptd[i]) == 1) ++i; printf_s("Here are your %d entries:\n", number = i); for (i = 0; i < number; i++) {
printf_s("%7.2f ", ptd[i]); if (i % 7 == 6) putchar('\n'); } if (i % 7 != 0) putchar('\n'); puts("Done."); free(ptd); return 0;}

动态分配内存:

在这里插入图片描述
在这里插入图片描述

free()的重要性

在这里插入图片描述

在这里插入图片描述

calloc函数

在这里插入图片描述

在这里插入图片描述

动态内存分配和变长数组

在这里插入图片描述

在这里插入图片描述

动态内存分配和存储类别

在这里插入图片描述

#include 
#include
#include
int static_store = 30;const char * pcg = "String Literal";int main(){
int auto_store = 40; char auto_string[] = "Auto char Array"; int * pi; char * pcl; pi = (int *)malloc(sizeof(int)); *pi = 35; pcl = (char *)malloc(strlen("Dynamic String") + 1); strcpy_s(pcl, strlen("Dynamic String")+1,"Dynamic String"); printf_s("static_store: %d at %p\n", static_store, &static_store); printf_s(" auto_store: %d at %p\n", auto_store, &auto_store); printf_s(" *pi: %d at %p\n", *pi, pi); printf_s(" %s at %p\n", pcg, pcg); printf_s(" %s at %p\n", auto_string, auto_string); printf_s(" %s at %p\n", pcl, pcl); printf_s(" %s at %p\n", "Quoted String", "Quoted String"); free(pi); free(pcl); return 0;}

在这里插入图片描述

ANSI C类型限定符

const、volatile、restrict、_Atomic+stdatomic.h库文件

const(第4章、第10章)

在这里插入图片描述

指针和形参声明中使用const

在这里插入图片描述

在这里插入图片描述

volatile类型限定符

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

restrict类型限定符

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

_Atomic类型限定符

并行程序:

在这里插入图片描述

旧关键字的新位置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

关键概念

在这里插入图片描述

本章小结

在这里插入图片描述

在这里插入图片描述


2020-04-08

大连


转载地址:https://blog.csdn.net/answerMack/article/details/105338533 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C primer plus第12章课后习题9(理解指针与动态分配)
下一篇:EOF字符

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月22日 22时03分13秒