标签归档:指针

c语言函数指针的demo

函数指针的存在,可以将程序内部的结构对外提供一次修改的机会。似乎与耦合性有一点儿矛盾。
不过有的时候,这种用法是必须的。比如说,让你的程序可以动态扩展。

#include <stdio.h>
#include <stdlib.h>

void hello();

int main(int argc,char *argv[]) {
   void (*p)(void);
   p = hello;
   p();
   return 0;
}

void hello(void){
   printf("Hello world!\n");
}

strlen的进化

size_t strlen(const char *s) {
   size_t  n;
   for(n=0;*s!='\0';s++) n++;
   return n;
}

将n初始化的时候赋初值,

size_t strlen(const char *s) {
   size_t  n = 0;
   for(;*s!='\0';s++) n++;
   return n;
}

*s!=0和*s!=’\0’是一样的,因为’\0’的值就是0,然后循环条件可以变为*s

size_t strlen(const char *s) {
   size_t  n = 0;
   for(;*s;s++) n++;
   return n;
}

将s++前移

size_t strlen(const char *s) {
   size_t  n = 0;
   for(;*s++;) n++;
   return n;
}

前后都为空的for语句相当于while语句

size_t strlen(const char *s) {
   size_t  n = 0;
   while(*s++) n++;
   return n;
}

接下来从运行速度的方面考虑,将自增操作换掉,这样就用到了指针之间的相减获得之间的元素数目

size_t strlen(const char *s) {
   char *p=s;
   while(*s++)
   return s-p;
}