c指针详情

发布时间 2023-07-31 16:46:22作者: 崔福建

c指针

1.什么是指针?

指针是什么?首先,它是一个值,这个值代表一个内存地址,因此指针相当于指向某个内存地址的路标。
比如,char*表示一个指向字符的指针,float*表示一个指向float类型的值的指针。

int* a;
float *a;
char * a;

这些写法都是合理的
如果同一行声明两个指针变量,那么需要写成下面这样。

// 正确
int * foo, * bar;
// 错误
int* foo, bar;

第二行的执行结果是,foo是整数指针变量,而bar是整数变量,即*只对第一个变量生效。
个指针指向的可能还是指针,这时就要用两个星号**表示。

int** foo;

上面示例表示变量foo是一个指针,指向的还是一个指针,第二个指针指向的则是一个整数。

指针详情

*这个符号除了表示指针以外,还可以作为运算符,用来取出指针变量所指向的内存地址里面的值。

&运算符用来取出一个变量所在的内存地址。

声明指针变量之后,编译器会为指针变量本身分配一个内存空间,但是这个内存空间里面的值是随机的,也就是说,指针变量指向的值是随机的。这时一定不能去读写指针变量指向的地址,因为那个地址是随机地址,很可能会导致严重后果。

&运算符与*运算符互为逆运算,下面的表达式总是成立。

int i = 5;
if (i == *(&i)) // 正确

示例

#include <stdio.h>
int main(void) {
    int* p;
    int i;
    p = &i;
    *p = 13;
    printf("p=%p\n", p);
    printf("i=%d\n", i);
    printf("*p=%d\n", *p);
    printf("&i=%p\n", &i);
}