
在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。
int a[5][6];
int (*p)[6]=a;
int * p1= a[0];
int * p2= &a[0][0];
首先,数组首地址值=行首地址值=第一个元素地址值,注意只是值相等,重要的是类型不同.记住:地址类型很重要.
1)int (*)[n]
数组地址类型,其中n为列宽,表示一行中包含n个int元素,此处为6,即6个int元素组成一行,并将其看成一个整体,int的数据宽度是4字节,因此一行(整体)有4*6=24个字节.此类指针每次递增1即递增24个字节
指针值都是4字节的,区分不同类型的目的就是为了指示:指针指向的内存的数据宽度,即该指针指向的地址开始存放的数据是多少字节的,进而实现数据对齐.
a是个数组,"a"这个标识符映射为常量指针,其类型为 int (*)[6],指向数组首地址,因此可以直接赋值给p.
注意p的数据宽度也是4*6=24,如果p++,那么递增的是24个字节.所以这种类型的指针也称为行指针,因为以行为基本单位.
因此,二维数组指针就是行指针.
2)int *
单个int类型元素的指针,也可以作为一维数组的指针,同样原因:数据宽度一致,都是4字节.
因此a[0]表示数组首行,而行数据是个int型的一维数组,因此其类型为 int *,所以可以直接赋值.
同样 a[0][0]表示数组首行首元素,因此取地址后也可以直接赋值给int *类型指针.
最后再次重申,解读指针定义或者分析右值类型时,数据宽度是关键所在.
附图显示数组首地址值=行首地址值=第一个元素地址值,但是类型是不同的.

指针变量的内容 是一个地址值
如int a,*p
p = &a;
p指向了a这变量,p的内容就是a所在的空间地址, 用*p 相当于用a 但是 p++后 就不再指向这个变量了,而是a整型变量之后的一个整型变量
看一下定义就会知道
指针变量 就是存储“地址”的变量
int *p ; p 是指针变量,他用来存储地址,他的值就是个地址值!
在没有给p赋值时,一般它的值是0或是一个不确定的值,这时的指针变量是不能使用的!称之为野指针。
答非所问,楼上均是 Ctrl V党。指针指向地址,内存地址,也就是说指针就是地址。
1维数组: int a[3],a就是首元素的地址,也就是指针。所以元素可以表示成*(a+0),*(a+1),*(a+2);
元素地址值:a,a+1,a+2.
2维数组: int a[3][3],元素:a[0][0]=*(a[0]+0)=*(*(a+0)+0) ……a[i][j]=*(*(a+i)+j)
元素地址值:*(a+0)+0……*(a+i)+j;
3维数组:int a[3][3][3],在外面套一个*()就是了。*(*(*(a+0)+0) +0)……a[i][j][k]=*(*(*(a+i)+j)+k)
元素地址值:去掉*()就是了:*(*(a+i)+j)+k
以上就是关于指针表示元素的值还是地址的全部内容,以及指针表示元素的值还是地址的相关内容,希望能够帮到您。
下一篇:家常孜然羊肉做法好吃的停不下来