成也指针,败也指针。对于C语言来说,指针是他的招牌,却也是最令人望而生畏的。我会尝试用很号理解的方式去阐述,希望你可以看的明白。
指针的定义
其实指针就是一个普通的变量,只是他存放的是一个地址,他占用的空间是固定的,在32位系统上是4个字节,在64位的系统上是8个字节。
#includeint 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 10names is Alannames is Alanname 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指向的位置。复制代码