基本概念
在程序中是通过对内存单元进行存取操作,但是代码经过编译后就将变量名转换为变量在内存中的地址,对变量值的存取都是通过地址进行的。如i+j 其含义是:根据变量名对应的地址,读取 i 的数据放入到CPU寄存器中,再找到 j 的地址,读取 j 的数据放入到CPU另一个寄存器中,通过CPU的加法中断计算结果。
指针变量
形式:类型说明 *变量名;
定义与赋值
int a;
int *p=&a;
int a;
int *p;
p=&a;
引用
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p,q;
p=&q;
scanf("%d",&q);
printf("%d",*p);
return 0;
}
int main(){
int *p,q;
p=&q;
scanf("%d",p);
printf("%d",q);
return 0;
}
& 和 * 运算符
&:取地址运算符。获取变量的地址
*:指针运算符,单目运算符。返回指针地址内变量的值。
*&p 和 &*p运算符
&和*的优先级相同,则自右向左结合。
int a;
p=&a;
*&p:&p取变量a的地址,然后执行 * 预算,相当于取出变量a所在地址的值,实际上就是变量a。
&*p:*p相当于变量a,然后执行 & 运算,相当于取变量a的地址。
#include <stdio.h>
#include <stdlib.h>
int main()
{
long *p;
long q;
scanf("%ld",&q);
p=&q;
printf("&*p的值为%ld\n",&*p);
printf("*&q的值为%ld\n",*&q);
return 0;
}
指针的自加减运算
指针的自加减运算相当于按照变量类型所占字节数的大小,对地址进行加减。
#include <stdio.h>
#include &