c指针详情
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);
}