下一节连接一文看懂C指针(2)——多级指针
指针初始化过程
- 定义一个变量a:int a=3;
内存中的值 | 地址 |
---|---|
3 | 0XA0(&a) |
此时&a(a的地址)为0XA0
- 定义一个指针p: int *p;
内存中的值 | 地址 |
---|---|
p指针的值 | 0XB0(&p) |
- 对指针进行赋值
p=&a; //意思是把&a(即a的地址)赋值给p这个指针
内存中的值 | 地址 |
---|---|
p=p指针的值(0XA0) | 0XB0(&p) |
- 取地址所指向的值
*p=3;
指针三个易混淆结构
p:是指针的本体,p存放的是一个地址,例子中存放的是0XA0,即p=0XA0
&p:是p指针本身的内存地址,例子中为0XB0,即&P=0XB0
*p:是指针存放的地址所对应的值,例子中为3,即 *p=3
对等关系:
p = &(*p) = &a
*p = a
代码
C语言代码演示:
#include<stdio.h>
void test(int* p)
{
*p = 1111;
}
int main()
{
int *p = NULL;
int a = 2333;
p = &a;
//*p是p指针存放地址对应的值
//p是p指针存放的地址
//&p是p指针本身的地址
//&(*p)是(p指针存放地址对应的值)的地址
//a是a的值
//&a是存放a的地址
//p = &(*p) = &a
// *p = a
printf("*p = %d , p =%d , &p = %d , &(*p) = %d , \na = %d , &a = %d\n", *p, p, &p, &(*p), a, &a);
test(p);
printf("*p = %d , p =%d , &p = %d , &(*p) = %d , \na = %d , &a = %d\n", *p, p, &p, &(*p), a, &a);
getchar();
return 0;
}
程序运行截图: