成也指针,败也指针。对于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指向的位置。