C语言中的&和*
1、C语言中为什么存在&和*
C语言中大名鼎鼎的“指针”,想必你肯定听说过吧。
没错,C语言中的&和*就是为了指针而诞生的。
指针说白了就是直接/间接的操作(取/存)存储中的地址中的数据。
试想一下,如果没有&和*的存在,你可能每天都在为计算和寻找某个变量在哪里而发愁呢!
有了&和*之后,就不需要你手动的去计算内存中的地址。
2、&和*是什么?
&:取地址运算符;
*:间接寻址,也可以称为取值运算符,这样就好理解了运算符;
&的作用:如果想找到变量的地址,可以使用&(取地址)运算符。
*的作用:如果你学过链表,你经常会用到:
p->q;
那么p就是指向q的地址。
如果你学过计算机组成原理或者操作系统,里面的寄存器的寻址方式,就有间接寻址方式。
间接寻址方式:说白了就是取这个地址指向的地址的值。
如果有一个变量p,那么p就是取p指向地址的值。
3、&(取地址运算符)和*(间接寻址运算符)的使用
int i; 是变量
int *pi;是指针
int i, *pi; char c,*pc;
例子:
#include <stdio.h> int main() { int i, *pi; char c,*pc; //初始化i为10 i = 10; //初始化c为‘a’字符 c = 'a'; //把pi指向i的地址 pi = &i; //把pc指向c的地址 pc = &c; printf("i=%d;c=%c\n",*pi,*pc); //做一些基本处理 *pi = *pi + 100; printf("*pi+100=%d\n",*pi); printf("pi addr=%p;i addr=%p;pc addr=%p;c addr=%p\n",pi,&i,pc,&c); return 0; }
执行结果:
i=10;c=a *pi+100=110 pi addr=0x7ffe76034684;i addr=0x7ffe76034684;pc addr=0x7ffe76034683;c addr=0x7ffe76034683