要熟练掌握指针,必须要先理解内存是什么
(1)内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中运行的,所以为了有效的使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节。
为了能够有效的访问到内存的每个单元,就把内存单元进行了编号,这些编号被称为该内存单元的地址
(2)如何产生地 址
我们所说的32位,64位指的是
32位指的是有32根地址线(电线) 或者是数据线 ,一旦通电就有正电和负电之分,如果正电用1来表达,负电用0来表达。
00000000000000000000000000000000
00000000000000000000000000000001
00000000000000000000000000000010
................................................................
0111111111111111111111111111111111111
100000000000000000000000000000000
................................................................
11111111111111111111111111111111111111
通电后地址线可能产生2的32次方个二进制序列,就可以产生2的32次方 个内存编号
(3)那么这样一个内存单元地址是多大
计算机有很多单位 bit(比特位)- byte(字节)- KB - MB - GB
每个内存单元是以一个字节划分的—一字节=8bit
(4)使用 & 操作符取地址
int main( )
{
int a=10;//申请四个字节的空间
//怎么知道a变量存放在地址哪个地方?如何拿地址?
// &a取地址操作符
printf("%p/n",& a);
return 0;
}
(5)如何存放地址
int main( )
{
int a=10;//申请四个字节的空间
//有一种变量是用来存放地址的——指针变量
int* p=&a; // 将地址存入p,p就称为指针变量 p的类型用 int* 定义
printf("%p\n",& a);
printf("%p\n",p); //返回的是已存入的a的地址
return 0;
}
(6)修改保存过地址后函 数的的值 *p —解引用操作符
int main( )
{
int a=10;//申请四个字节的空间
int* p=&a;
*p=20; //找到p下存的地址a的值,把值改为20
printf("%d\n",a);
return 0;
}
总结:变量都有地址,取出变量地址如下
int main(){
int a=10;
&a;//&—取地址操作符
printf(“%p”,&a);//打印地址,%p —以地址的形式打印
return 0;
}
地址如何存储,需要定义指针变量
int main(){
int a=10;
int *p; //p为一个整型指针变量
p=&a;
return 0;
}