例1

#include <stdio.h>

int main(){
int * p; //int * 表示该p变量只能存储int类型变量的地址
printf("%d",p);
return 0;
}

因为p没有保存任何变量的地址,所以最终会指向一个不确定的垃圾地址 。

运行结果:

指针与结构体知识点_指针变量

例2

#include <stdio.h>
int main(){
int * p; //p是变量名字,int * 表示该p变量只能存储int类型变量的地址
int i = 10;
int j;
p = &i; //&表示取地址符,p来存储i的地址
//若把该行去掉,那么p就没有保存任何地址,那么p最终会指向一个不确定的垃圾地址
*p = i; //等价于 i=i。
// p = 10; //error
j = *p; //等价于 j=i
printf("i = %d, j=%d, *p = %d\n",i,j,*p);
return 0;
}

运行结果:

指针与结构体知识点_#include_02


知识点

当int *p时,p就成了指针变量

p代表地址

*p代表地址内容

1,p保存i的地址,那么p就指向i

2,修改i的值不会影响p的值

修改p的值也不会影响i的值

4,*p就是普通变量i,*p=1

5,p是i的地址,&i也是i的地址,p=&i

结构体

int i;
f(i);
f(&i);

使用结构体,有两种方式,

  1. 通过结构体变量的名字来使用
  2. 通过一个指向了某一个结构体变量的指针来实现

二者得到的内容相同,但是 前者耗内存,耗时间,因为地址,只用了4个字节

第二种更加方便,第一种必须要有其名字
不能定义10个变量,再定义10个名字
结构体变量之间,通常只传递他们的地址,不发送整体变量