
内存是由字节构成的一片连续存储的空间,每个字节都有一个编号。
字节的编号就是内存地址,简称地址。
CPU是通过内存地址来访问内存,进行数据的存取(读写)的。
在C语言程序中定义一个变量,系统根据变量的类型为变量分配一定长度的存储单元。
一个存储单元手字节的编号称为该存储单元的地址,也就是相应变量的地址,在一个地址所标记的存储单元中存放的数据称为该存储单元的内容。
一个存储单元的地址唯一指向一个内存单元,这个地址也称为指针。指针就是内存单元的地址,指针指向一个内存单元,变量的指针就是变量的地址。
变量的指针指向一个变量对应的内存单元。
指针(地址)也是数据,可以保存在一个变量中。保存指针(地址)的变量称为指针白能量。
因此,一个指针变量的值就是某个内存单元的地址(指针)。
一个指针是一个地址,是一个常量,而一个指针变量可以被赋予不同的指针值,是变量。
指针说明,即定义的变量为一个指针变量
指针变量名
指针变量所指向的对象的数据类型
类型标识符 *指针变量名
例如
int *ip; // ip是指向整型变量的指针变量
char *cp; // cp是指向字符型变量的指针变量
double *fp; // fp是指向实型变量的指针变量
取地址运算符&
取地址运算符&是单目运算符,结合性为右结合性,功能是取变量的内存地址,一般形式为:&变量名。
例如,&a表示a的地址,&b表示变量b的地址
取内容运算符*
取内容运算符*是单目运算符,结合性为右结合性,在*运算符之后必须紧跟指针变量名,一般形式为:*指针变量名
例如,*ip表示指针变量ip所指向的变量(*和指针变量名之间不允许有空格)。

注意,取内容运算符*和指针变量蒂尼中的指针类型说明符*是不同的。
在指针变量定义中,*是指针类型说明符,表示其后的变量是指针类型。
而表达式中出现的*则是一个运算符,用以表示指针变量所指向的变量。c语言内存分配对应
关于指针运算符的说明
已知定义语句
int a, *pa = &a, *pb;
&*pa等价于&a
&*pa即&(*pa),即先进行*运算,得到变量a,再进行&运算(取a的地址)。
*&a等价于a
*&a即*(&a),即先进行&运算,得到a的地址,再进行*运算,得到变量a。
可以通过赋值语句将一个内存地址赋给已定义的指针变量,通过赋值运算可以改变指针变量的指向。
// 把整型变量a的地址赋予整型指针变量,通过赋值运算可以改变指针变量的指向。
int a, *pa;
pa = &a;
// 把指针变量pa的值赋予指针变量pb,使得pa和pb均指向变量a
int a, *pa = &a, *pb;
pb = pa;
// 将空指针赋给指针变量
int *p;
- - p = NULL; // p = 0;
C语言规定数组名代表数组的首地址,即第0个元素的地址,是一个指针常量。人们将数组的首地址即数组第0元素的地址称为数组的指针,数组元素的地址称为数组元素的指针。
一般形式:类型标识符 *指针变量名
int a[6], *pa;
pa = a; // 数组名a是数组的首地址
pa = &a[0]; // &a[0]为数组第0个元素的地址
数组指针变量与整数的加减算术运算
两数组指针变量的减运算
如果两个指针指向同一个数组,那么它们可以想见,其结果再减1为两个指针之间数组元素的个数。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66177-1.html
再多的叙利亚人也容得下
x)全新回归#
我有点好奇