指针
一、指针是什么
1、指针是什么?
指针理解的
2个要点:1. 指针是内存中一个最小单元的编号,也就是地址;
2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量
总结:指针就是地址,口语中说得指针通常值得是指针变量
2、指针变量
我们可以通过&(取地址操作符)取出变量的内存真实地址,吧地址可以存放到一个变量中,这个变量就是指针变量。
实例
#include <stdio.h>
{
int a=10;
int *p = &a;
return 0;
}
总结:指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)
一个小的单元到底是多大(一个字节)
如何编址
经过仔细地计算机和权衡我们发现一个字节给一个对应的地址是比较合适的。
对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的时候产生高电平(高电压)和低电平(低电压)就是(1/0);
那么32根地址线就会产生:2的32次方个地址。
这里我们可以理解
在32位的机器上,地址是32个0和1组成二进制序列,那地址就得用4个字节的空间来储存,所以一个指针变量的大小应该是4个字节。
那如果在64位机器上,如果有64个地址线那一个指针变量的大小是8个字节,才能存放一个地址。
总结一下
指针是用来存放地址的;
指针的大小在32位平台是4个字节,在64位平台是8个字节。
二、 指针和指针的类型
当有这样的代码
int num = 10;
p=&num
要讲&num(num的地址)保存到p中,我们知道p就是一个指针变量那他的类型是什么样的?
char *pc=null;
int *pi=null;
short *ps=null;
long *pl=null;
float *pf=null
double *pd=null
指针的定义方式是 type + *
其实就是:
char类型的指针就是为了存放char类型变量的地址。
short类型的指针就是为了存放short类型变量的地址。
int*类型的指针就是为了存放int类型变量的地址。
以此类推
2.1指针+ - 整数
#include <stdio.h>
int main()
{
int n = 10;
char *pc = (char*)&n;
int *pi = &n;
printf("%p\n",&n);
printf("%p\n",pc);
printf("%p\n",pc+1);
printf("%p\n",pi);
printf("%p\n",pi+1