指针的介绍

在C语言中最核心就是的指针了,其他的概念如类型,struct,函数等都很容易理解。掌握指针,基本上就是掌握C语言了。

#include "tommy.h"
#include <stdio.h>

int main(int argc, char **argv)
{
    tommy_hashdyn hashdyn;
    tommy_hashdyn_init(&hashdyn);

    struct object {
         tommy_node node;
         int key;
         char value[256];
     };

    struct object* obj = malloc(sizeof(struct object));
    strcpy(obj->value, "hello world");

    struct object* search;

    obj->key = 123;
    tommy_hashdyn_insert(&hashdyn, &obj->node, obj, tommy_inthash_u32(obj->key));
    search = tommy_hashdyn_bucket(&hashdyn, tommy_inthash_u32(123));
    printf("key=%d|value=%s\n", search->key, search->value);
    return 0;
}

C++里弱化了指针,启用了引用的概念。C++的核心主要是STL。虽然C++里的概念很多,实际上并不难掌握。而且有了STL写起程序来就跟PHP一样。

#include <iostream>
#include <string>
#include <tr1/unordered_map>

using namespace std;

int main(int argc, char **argv)
{
    tr1::unordered_map<string, string> array;

    array["hello"] = "world";
    array["hello2"] = "world2";

    cout << array["hello"] << std::endl;
    cout << array["hello2"] << std::endl;
    return 0;
}

指针是什么

就是内存地址,如0x7ffff5c06b0d,32位是4字节整数,64位系统是一个8字节整数,一般用16进制表示 指针和整数没什么区别,可以互相赋值。但把一个数字当成指针去用,就会访问到错误的内存,轻则内存错误而发生段错误。重则破坏操作系统、磁盘甚至硬件

指针有类型

如int 、char *、struct mystruct *、void *、void * (func_ptr)(void *) 类型只会影响指针计算的长度,比如char *的指针加1表示向后移动1个字节。int *会向后移动4字节,结构体会移动sizeof(struct mystruct)个字节。