零基础学C语言 指针

199 阅读2分钟

成也指针,败也指针。对于C语言来说,指针是他的招牌,却也是最令人望而生畏的。我会尝试用很号理解的方式去阐述,希望你可以看的明白。

指针的定义

其实指针就是一个普通的变量,只是他存放的是一个地址,他占用的空间是固定的,在32位系统上是4个字节,在64位的系统上是8个字节。

#include <stdio.h>
int main(){
    int num = 10;
    int *num_point = #

    char *names[] = {
        "Alan", "Frank",
        "Mary", "John", "Lisa"
    };

    char *name = "Tom";

    printf("num is %d\n", *num_point);
    printf("names is %s\n", names[0]);
    printf("names is %s\n", *names);
    printf("name is %s\n", name);
}

运行结果如下,其中的*是一个取值符号:

num is 10
names is Alan
names is Alan
name is Tom

解释一下

这里解释一下数组指针和字符串指针。其中,数组指针是定义了一个指向一个数组的指针,而且是指先数组第一个元素的。所以在上面的names[0]*names结果是一样的。我用int指针来作为对比解释:

我们在定义的时候可以分解为这样:

int num = 10;
int *num_point;
num_point = #

所以,num_point就是一个地址,我们通过取值符号*得到的就是10。同理:

char *names[] = {
        "Alan", "Frank",
        "Mary", "John", "Lisa"
    };
printf("names is %s\n", names[0]);
printf("names is %s\n", *names);

所以其中names就是一個地址,指向數組的第一個元素,通过取值符号*得到的就是“Alan”

关于指针的一些定义

type *ptr    //type类型的指针,名为ptr。
*ptr    //ptr所指向位置的值
*(ptr + i)    //(ptr所指向位置加上i)的值,以字节为单位的话,应该是ptr所指向的位置再加上sizeof(type) * i。
&thing    //thing的地址。
type *ptr = &thing    //名为ptr,type类型的指针,值设置为thing的地址。
ptr++    //自增ptr指向的位置。