c语言指针

实验12——指针的基础应用2

佐手、 提交于 2019-12-08 09:00:30
1.本次课学习到的知识点: (1)电码加密中的字符串,字符串常量是一串字符,是用一对双引号括起来的字符序列,是一个指向该字符串首字符的指针常量; (2)不要引用未赋值的指针,字符指针需要先赋值,后引用,否则指针的值是不确定的,可在定义指针时,将它的初始值为空,如char*s=NULL; (3)字符值'\0'是终止字符值,加密函数encrypt()的形参是字符指针,调用printf()函数,以%s的格式输出字符串,作为输出参数,数组名sa、指针sp和字符串“string”的值都是地址; (4)字符串的复制: 字符串复制函数 char *strcpy(char *s1,char *s2); 字符串连接函数 strcat(s1,s2); 字符串比较函数 strcmp(s1,s2); 字符串长度函数 strlen(s1); (5)字符串的输入和输出,函数scanf()和gels()用了输入字符串,printf()和puts()输出字符串; (6)使用c语言标准库中的字符、字符串函数,要加上头文件名,如ctype.h、stdio.h、string.h; 2. 实验过程中遇到的问题及解决方法: (1)指针这有些难理解,内容较多,使用不当就会出错; (2)看书,查资料,问同学; 3. 实验心得体会及本章学习总结: (1)心得:应多理清概念和它使用的方法,多多书,多看练习; (2)总结:内容较多

2019春第六周编程总结

扶醉桌前 提交于 2019-12-08 08:57:34
这个作业属于哪个课程 C语言程序设计Ⅱ 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/MS/homework/2829 我在这个课程的目标是 利用指针知识解决相关实际问题 在具体哪方面帮我实现目标 设计密码开锁、交换变量解决问题以及电码加密 参考文献 C语言基础、 http://www.w3school.com.cn/html/html_forms.asp 6-1 求两数平方根之和 (10 分) 函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。 函数接口定义: double fun (double *a, double *b); 其中 a和 b是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。 裁判测试程序样例: #include<stdio.h> #include <math.h> double fun (double *a, double *b); int main ( ) { double a, b, y; scanf ("%lf%lf", &a, &b ); y=fun(&a, &b); printf ("y=%.2f\n", y ); return 0; } 输入样例: 12 20 输出样例: y=7.94 实验代码:

从反转字符串中看指针魅力

送分小仙女□ 提交于 2019-12-08 06:38:02
从 反转 字符串中看指针魅力 从开学到现在半个学期过去了 ( ╯‵□′ ) ╯︵┻━┻,我们 C 语言的学习也进入了一个“学到了指针”的阶段 ( ╯‵□′ ) ╯︵┻━┻。 虽然指针这章内容较抽象,我们在感叹指针真是个磨人的小妖精之余,也不能否认指针的魅力所在,由于计算机的硬件指令很大程度上要依赖地址,所以指针提供的就是一种类似于计算机底层的表达方式来使程序猿们更加愉快高效地撸代码。 让我们先从反转字符串这个程序里了解一下指针提供的便利: 实例:实现算法使一个字符串颠倒顺序,实现步骤:构建两个迭代器 p 和 q ,在一次遍历中, p 的位置从字串开头向中间不断更替, q 从字串末尾向中间不断更替,然后每次交换 p 和 q 所指向的内容即可,直到 p 和 q 在中间相遇,这时循环次数刚好等于字串的长度 _l/2 。 ( “ 迭代 ” , 即更替,也就是说 “ 迭代器 ” 的意思就是指用来做更替操作的工具 ) 实现代码段如下所示: 1. void reverse( char *_str, int _l) // 反转函数 ,_l 指要反转字串的长度 2. { 3. char *p=_str,*q=_str+_l-1,temp; 4. 5. while (q>p) 6. { 7. temp=*p; 8. *p=*q; 9. *q=temp; 10. 11. p++; 12. q--; 13

Linux操作系统 内存管理、用户操作和文件操作

﹥>﹥吖頭↗ 提交于 2019-12-08 05:16:21
内存管理、用户操作和文件操作 预备知识: 1、Linux系统的内存分为物理内存和虚拟内存。 物理内存 是指安装在计算机当中的主存储器; 虚拟内存 是 一段 虚拟的逻辑上连续的储存空间, 虚拟内存是由多个内存碎片组成,只有 正在使用的 虚拟内存被存放在 内存 上,对于暂时不使用的虚拟内存空间其实是储存在 外存 中。虚拟内存空间地址和实际的物理内存空间地址存在某种逻辑上的关系,如果虚拟内存空间地址的内容将被使用,通过逻辑关系可以计算出此部分内容对应的实际物理内存空间,然后将内容加载到内存中。虚拟内存在 一定程度上 独立于物理内存。 2、计算机的物理 内存空间有限(虚拟内存只要运行部分占用物理内存空间) 而且不同PC的 物理内存是不一样(通过虚拟内存空间,进程中代码的访存操作的地址全部是这个内存空间的地址) ,所以进程使用的是 虚拟内存空间 。 3、内存的最小粒度是页,进程虚拟地址空间和内存的映射也是以页为单位。页(面)的大小称为页面的大小,大小应该为2的幂。页号P=A/L;A表示逻辑地址空间中的地址(虚拟内存空间地址),L表示页面大小。 4、物理块:将内存的物理地址空间划分为若干块,称为物理块,物理块与页(面)一一对应。 5、页表储存在物理内存中,由操作系统维护。CPU中有一个 页表寄存器 ,里面存放着当前进程页表的 起始地址和页表长度

C++ 线程池实现原理

若如初见. 提交于 2019-12-07 21:31:18
背景 多线程编程是C++开发者的一个基本功, 但是很多开发者都是直接使用公司给包装好的线程池库, 没有去了解具体实现,有些实现也都因为高度优化而写得讳莫如深,让初学者看得吃力。 所以写这篇文章主要是想以非常简单的方式讲讲实现原理, 希望初学者看完之后不是觉得「不明觉厉」,而是觉得「原来如此」。 面朝代码 首先先来一段超级简单(注释丰富)的代码展示多线程编程的经典写法。 注: 该段代码和完整运行示例请见 limonp-thread-pool-programming-example , 可以通过以下命令跑通示例代码和输出结果,建议尝试以下。当然记得前提是该机器的网络可以访问 GitHub 的情况下。 可能因为在中国访问 GitHub 并不是很稳定,不是每次都能成功,所以如果卡住的话就多make几次。有兴趣一起交流学习c/c++的小伙伴可以加群:941636044,里面有大神会给予解答,也会有许多的资源可以供大家学习分享,欢迎大家前来一起学习进步! git clone https://github.com/yanyiwu/practice cd practice/cpp/limonp-v0.5.1-demo make #include "limonp/ThreadPool.hpp" #include "limonp/StdExtension.hpp" using namespace

realloc 用法

瘦欲@ 提交于 2019-12-07 17:42:26
//转至: https://blog.csdn.net/snlying/article/details/4005238 最近在写source code时需要在数组的buffer小时重新申请一块buffer,故找了一些资料,乖乖,竟然原指针还可以“漂移”。。。。。。 realloc 原型:extern void *realloc(void *mem_address, unsigned int newsize); 用法:#include <stdlib.h> 有些编译器需要#include <alloc.h> 功能:改变mem_address所指内存区域的大小为newsize长度。 说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,应使用free()函数将内存块释放。 注意:这里原始内存中的数据还是保持不变的。 举例: // realloc.c #include <syslib.h> #include <alloc.h> main() { char *p; clrscr(); // clear screen p=(char *)malloc(100); if(p) printf("Memory Allocated at: %x",p); else printf("Not Enough Memory!/n"); getchar(); p=

[iOS]C语言知识点系列视频整理

故事扮演 提交于 2019-12-07 09:20:56
C语言知识点系列视频 目录 C语言技术视频-01-变量的定义 C语言技术视频-02-程序分支结构(if...else) C语言技术视频-03-程序分支结构(switch) C语言技术视频-04-程序循环结构(while{}) C语言技术视频-05-程序循环结构(do{}while();) C语言技术视频-06-程序循环结构(for{}) C语言技术视频-07-函数的定义 C语言技术视频-08-结构体的定义 C语言技术视频-09-枚举的定义 C语言技术视频-10-指针变量 C语言技术视频-11-指针变量练习一(交换值) C语言技术视频-12-指针变量练习二(数组打印) C语言技术视频-13-指针变量练习三(结构体指针变量) C语言技术视频-14-指针变量高级用法(函数指针) C语言技术视频-15-指针变量高级用法练习一(函数指针完成动态排序) C语言技术视频-16-指针变量高级用法(堆栈内存) C语言技术视频-17-指针变量高级用法练习二(使用堆内存完成链表结构的存储) 整集下载地址 [ 百度云盘 ] 链接: http://pan.baidu.com/s/1eQhNnUi 密码: zmps 来源: oschina 链接: https://my.oschina.net/u/2438875/blog/516293

C语言各种变量的初始化

佐手、 提交于 2019-12-06 17:49:07
数值类变量初始化 整型、浮点型的变量可以在定义的同时进行初始化,一般都初始化为 0 。 int inum = 0 ; float fnum = 0.00f ; double dnum = 0.00 ; 字符型变量初始化 字符型变量也可在定义的同时进行初始化,一般初始化为 '\0' 。 char ch = '\0' ; 字符串初始化 字符串初始化的方法比较多,我这里简单介绍三种,因为字符串本质上是由一个个字符组成的字符数组,所以其初始化的最终目的, 就是将字符数组里面的一个个字符都初始化为 '\0' 。 方法一 :使用空的字符串 "" 。 char str [ 10 ] = "" ; 方法二 :使用 memset 。 char str [ 10 ] ; memset ( str , 0 , sizeof ( str ) ) ; 方法三 :写一个循环。 char str [ 10 ] ; for ( int i = 0 ; i < 10 ; i ++ ) { str [ i ] = '\0' ; } 这里比较推荐的是第二种初始化方法。也即使用 memset 进行初始化。 很多人对 memset 这个函数一知半解,只知道它可以初始化很多数据类型的变量,却不知道其原理是什么样的,这里做一下简要的说明: memset 是按照字节进行填充的。 先看下面的一段代码: int num;

c语言中realloc()函数解析

匆匆过客 提交于 2019-12-06 15:00:19
真是有点惭愧,这些内容本应该很早就掌握的,以前只是糊里糊涂的用,不知道在内存中具体是怎么回事,现在才弄清楚。 realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。 如果将分配的内存减少,realloc仅仅是改变索引的信息。 如果是将分配的内存扩大,则有以下情况: 1)如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。 2)如果当前内存段后面的空闲字节不够,那么就使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据块释放掉,返回新的内存块位置。 3)如果申请失败,将返回NULL,此时,原来的指针仍然有效。 注意:如果调用成功,不管当前内存段后面的空闲空间是否满足要求,都会释放掉原来的指针,重新返回一个指针,虽然返回的指针有可能和原来的指针一样,即不能再次释放掉原来的指针。 看一下示例代码 #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[], char* envp[]) { int input; int n; int *numbers1; int *numbers2; numbers1=NULL; if((numbers2=(int

快速上手Gobject

百般思念 提交于 2019-12-06 14:54:11
What is G-object? — 很多人被灌输了这样一种概念:要写面向对象程序,那么就需要学习一种面向对象编程语言,例如C++、Java、C#等等,而C语言是用来编写结构化程序的。 — 事实上,面向对象只是一种编程思想,不是一种编程语言。换句话说,面向对象是一种游戏规则,它不是游戏。 — Gobject,亦称Glib对象系统,是一个程序库,它可以帮助我们使用C语言编写面向对象程序;它提供了一个通用的动态类型系统(GType)、一个基本类型的实现集(如整型、枚举等)、一个基本对象类型-Gobject、一个信号系统以及一个可扩展的参数/变量体系。 Why Bother to use Gobject ? — GObject告诉我们,使用C语言编写程序时,可以运用面向对象这种编程思想。 — Gobject系统提供了一个灵活的、可扩展的、并且容易映射到其他语言的面向对象的C语言框架。 — GObject的动态类型系统允许程序在运行时进行类型注册,它的最主要目的有两个: 1)使用面向对象的设计方法来编程。GObject仅依赖于 GLib 和 libc ,通过它可使用纯C语言设计一整套面向对象的软件模块。 2)多语言交互。在为已经使用 GObject框架写好的函数库建立多语言连结时,可以很容易对应到许多语言,包括C++、Java、Ruby、Python和.NET/Mono等