[置顶]关于博主

首先感谢各位通过域名52coder.net 52murong.com访问本站。

52coder.net是很早之前与同学一起脑洞的域名:中文名可以叫做-我爱程序员。最开始是从非诚勿扰开始聊起,我说以后要做一个网站,专门去为程序员解决个人问题,于是就有了现在的这个域名。52murong.com慕蓉是我女朋友的名字,由于她也是一名程序员,所以目前现在两个域名均指向了同一个站点而没有引起任何冲突。

博客荒废了很久之后在2017-06月左右开始更新,从未奢望会有人来阅读我写的东西,只是用来记录自己的学习总结,在网页端方便查询。

目前在读的巨著有:

Linux/UNIX系统编程手册

深入理解计算......

指针数组与数组指针

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

数组指针:a pointer to an array,即指向数组的指针

还要注意的是他们用法的区别,下面举例说明。

int* a[4] 指针数组

表示:数组a中的元素都为int型指针

元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*

int (*a)[4] 数组指针

表示:指向数组a的指针

元素表示:(*a)[i]

我们先看维基百科中对于数组指针的解释:

数组名出现在表达式中时,绝大多数情况(除了数组名作为sizeof的操作数或......

TLPI-Chapter 20 信号

基本概念

信号是事件发生时对进程的通知机制。有时也称为软件中断,信号与硬件中断相似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的精确时间。

一个具有合适权限的进程能够向另一进程发送信号,信号的这一用法可作为一种同步技术,甚至是进程通信IPC的原始形式。进程也可以向自身发送信号。然而发往进程的诸多信号,通常都是源于内核。

引发内核为进程产生信号的各类事件如下:

硬件发生异常:硬件异常的例子包括执行一条异常的机器语言指令,如被0除,或者引用了无法访问的内存区域。

用户键入能够产生信号的中断特殊字符:包括中断字符(Control-C)

发生了软件事件:列......

C函数指针基础

函数指针可以像一般函数一样,用于调用函数、传递参数。在如 C 这样的语言中,通过提供一个简单的选取、执行函数的方法,函数指针可以简化代码。

函数指针只能指向具有特定特征的函数。因而所有被同一指针运用的函数必须具有相同的参数和返回类型。

一个简单的例子:

#include <stdio.h>

// 函数原型

void sayHello();

//函数实现

void sayHello(){

printf("hello world\n");

}

// main函数调用

int main() {

sayHello();

return 0;

}

在上面......

分析C语言声明

在阅读Liunx/UNIX系统编程手册一书在阅读到第20章时遇到函数signal()的声明时完全不懂这个函数是什么意思,于是网上搜索,有几个帖子里面介绍的方法是《C专家编程》一书第三章中相关内容,本文就是为了弄懂函数signal()的声明。

在阅读了本章内容后,我尝试用自己的语言来解释函数signal()的声明,如果有幸有朋友看到,希望可以批评指正。

首先介绍signal()函数声明前先了解函数指针,参考C函数指针基础.

首先函数signal()的原型:

void (*signal(int sig, void (*handler)(int)))(int);

分析如下形式:

......

100个GDB小技巧总结

本文是100个GDB小技巧阅读总结,100个GDB小技巧.

本文章将持续记录gdb使用技巧,不定时更新,欢迎留言讨论.

列出函数的名字

在这个例子中源代码如下:

#include <unistd.h>

#include <stdio.h>

#include <pthread.h>

void *thread_func(void *p_arg)

{

while (1)

{

sleep(10);

}

}

int main(void)

{

pthread_t t1, t2;

pthread_create(&t1, NULL, thread_......

Vim实用技巧

本文专门记录Vim实用技巧,部分内容来源于Vim实用技巧一书.

VI简介

数字0 跳转至本行开头

Shift + 4 跳转至本行末尾

Shift + G 跳转至文件最后一行

dd 删除当前行

5dd 删除当前行和之后的4行

dG 删除当前行到文件末尾

d20G 删除从当前行至20行

复制命令

yy 复制当前行

5yy 复制当前行和之后4行

yG 复制当前行到文件末尾

y20G ......

算法概论

本文是算法概论读书笔记,算法概论这本书在豆瓣评分高达9分,在收到学弟寄来的这本书我随手翻了几页就被书中所述内容所吸引,因此本文持续记录书中对于我来说比较有意思又或者我之前理解不深刻或错误的地方。

序言

序言部分从费波那奇数列介绍开始,引入费波那奇数列的递归实现,接着分析递归实现算法慢的原因,因为很多求解步骤都是重复的。一种更合理的机制是随时存储中间计算结果。

C语言实现:

#include <stdio.h>

int Fibonacci(int n)

{

// 递归结束条件

if (0 == n)

{

return 0;

}

if (1 == n)

{

retur......

排序算法总结

排序就是将一组对象按照某种逻辑顺序重新排列的过程,本文是记录学习排序的总结,持续更新,计划一周时间,视工作忙与否而定。

选择排序

算法思路:

首先找到数组中的最小元素,其次将它和数组的第一个元素交换位置。再次在剩下的元素中找到最小元素,将它与数组的第二个元素交换位置。如此反复,直到将整个数组排序。

算法实现:

#include <stdio.h>

void SelectionSort(int a[],int n)

{

int pos = 0;

int temp = 0;

for(int i = 0;i < n;i++)

{

pos = i;

for(int ......

TLPI-Chapter 13文件I/O缓冲

函数:void *memalign(size_t alignment, size_t size);

The obsolete function memalign() allocates size bytes and returns a pointer to the allocated memory. The memory address will be a multiple of alignment, which must be a power of two.

memalign 分配 size 字节的空间,返回指向该空间的指针,空间的地址是 alignment 的倍数,alig......