c语言9 - 指针基本概念
指针: 地址,内存单元的编号。
内存单元: 计算机中内存最小的存储单位,大小为一个字节,每个内存单元都有唯一的一个编号,称这个内存单元的编号为:“地址”。
指针变量存指针地址的变量
内存单元与地址关系
如下代码可打印出变量的地址:
#include
int main(void){
int a = 10;
printf("%p\n", &a);
return 0;
}
即如下图;地址00062FE1C若存储变量a的值,a=10,则该地址的二进制符号为00001010,其余三个地址的符号为00000000,即剩下三个地址均为a变量使用,且留空。
指针
*p 指针变量
*p的意思就是,将p变量的内容取出,当成地址看待,找到该地址对应的内存空间。若作为左值,则存数据到空间中,若作为右值,则取出空间的内容。
数据在内存中的地址也称为[指针],如果一个变量存储了一份数据的指针,我们就称它为指针变量。
允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。
定义指针变量
定义指针变量与定义普通变量非常类似,不过要在变量名前面加星号*
,格式为:
datatype *name;
或者
datatype *name = value;
*
表示这是一个指针变量,datatype
表示该指针变量所指向的数据的类型 。例如:
int *p1;
p1 是一个指向 int 类型数据的指针变量,至于 p1 究竟指向哪一份数据,应该由赋予它的值决定。再如:
int a = 100;
int *p_a = &a;
在定义指针变量 p_a 的同时对它进行初始化,并将变量 a 的地址赋予它,此时 p_a 就指向了 a。值得注意的是,p_a 需要的一个地址,a 前面必须要加取地址符&
,否则是不对的。和普通变量一样,指针变量也可以被多次写入。
获取指针数据
指针变量存储了数据的地址,通过指针变量能够获得该地址上的数据,格式为:
*pointer;
这里的*
称为指针运算符,用来取得某个地址上的数据
#include
int main(){
int a = 10;
int *p = &a;
printf("%d, %d\n", a, *p);
printf("&a = %u, &*p = %u, &p = %u\n",&a, &*p