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_fu......

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)

{

return ......

排序算法总结

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

选择排序

算法思路:

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

算法实现:

#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 j ......

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......

旋转字符串

题目描述

给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。

暴力移位法

初看此题,可能最先想到的方法是按照题目所要求的,把需要移动的字符一个一个地移动到字符串的尾部,如此我们可以实现一个函数 LeftShiftOne(char* s, int n) ,以完成移动一个字符到字符串尾部的功能,代码如下所示:

#define M......

TLPI-Chapter 12系统和进程信息

“The /proc file system exposes a range of kernel information to application programs. Each /proc/PID subdirectory contains files and subdirectories that provide information about the process whose ID matches PID. Various other files and directories under /proc expose system-wide information that pro......

TLPI-Chapter 11系统限制和选项

关于系统限制C语言标准和SUSv3提供了两种方法:

1.在编译程序时能够获得一些限制和选项。

2.一些限制在程序运行时可能会发生变化。对此SUSv3定义了3个函数sysconf() pathconf()和fpathconf(),供应用程序调用以检查系统实现的限制和选项。

SUSv3将其规定的限制归为三类:

运行时恒定值 路径名变量值 运行时可增加值

在shell中,可以使用getconf命令获取特定UNIX系统中已然实现的限制和选项。例:

getconf ARG_MAX

getconf NAME_MAX /boot

在运行时获取系统限制#include <unis......