什么是指针?什么是数组?指针和数组的关系?数组
形象地讲,咱们能够把计算机的内存看做一条长街上的一排房屋,每一个房间均可以容纳数据并经过一个房号来表识。而表示每一个房间房号的值咱们能够称为地址。或许这样的比喻有局限性,毕竟真实地计算机内存是以数以万计的bit位组成。ide
⑴初始化: 指针
①最简单的以 int *p 为例,初始化时内存里开辟了四个字节的空间。内存
▇▇▇▇it
②另外一个声明 ,如今,咱们有两个变量,下图中显示了后面那个未知内容的内存。table
char ch = 'a';class
char cp = &a;变量
▇→▇▓←(?)引用
↗ ↖数据
(cp) (ch)
⑵“*”的用法
① 定义指针变量是
② 对指针变量进行节引用是
★注意1:若要实现地址的移动,是p++,而不是*p++
★注意2:
int *p = NULL; //表明建立一个指针变量,并对它进行初始化。
*p = NULL; //将访问到的内容改成NULL。
★注意3:对于数组int a[4],&a与a的区别是什么呢?&a与a的内容同样,但&a+1增长了16个字节,而a+1增长了一个字节。缘由是&a是整个数组的地址,而a是数组首元素的地址。
以下表格能够让咱们深入地理解指针与数组的区别
a[]={1,2,3,4} | char name[]="abcdef" | char *name="abcdef" |
sizeof(a)=16 | sizeof(name[0])=1 | sizeof(&name)=4 |
sizeof(&a)=16 | sizeof(&name)=4 | sizeof(*name)=1 |
sizeof(a+0)=4 |
sizeof(*name)=1 | sizeof(&name+1)=4 |
=4sizeof(*a)=4 | sizeof(&name+1)=4 | sizeof(name)=4 |
sizeof(a+1)=4 | sizeof(name+1)=4 | sizeof(name+1)=4 |
sizeof(&a)=4 | sizeof(name)=7 | strlen(name)=6 |
sizeof(&a[0])=4 | strlen(&name)=6 | strlen(&name)=6 |
sizeof(&a[0]+1)=4 | strlen(&name+1)=12 | strlen(&name+1)=随机值 |
指针数组与数组指针的区别
指针数组:用于存储指针的数组,即数组元素都是指针。
数组指针:指向数组的指针。
表达式 | 类型 |
表示 | 元素表示 |
int a[4] |
整型数组 | 含有4个元素的整型数组 | a[i] |
int *a[4] | 数组指针 | a中元素为int型指针 | *a[i]或*(a[i]) |
int (*a)[4] | 数组指针 | 指向数组a的指针 | (*a)[i] |
▲int *: 一次访问四个字节.
▲char *: 一次访问一个字节.