数组指针(数组指针的用法)

数组指针(数组指针的用法)

   

今天和大家分享一下关于数组指针的问题(数组指针的用法)。以下是边肖对这个问题的总结。让我们来看看。

首先,数组指针和指针数组的区别

二、指针数组和数组指针的区别

1。性质不同

指针数组:首先,它是一个数组,数组的元素都是指针,是“存储指针的数组”的缩写。数组指针:首先是指针,指向一个数组,是“指向数组的指针”的简称。

2。字节不同

数组占用多少字节是由数组本身的大小决定的。每个元素都是一个指针,任何类型的指针在32位系统中都将总是占据4个字节。

在32位系统中,数组指针总是占用4个字节。至于它所指向的数组占了多少字节,我不知道,但要看数组的大小。

3。意思是* * *不一样

指针数组:数组A中的所有元素都是int指针;数组指针:指向数组a的指针。

4。不同的变量

指针数组:指针数组可以说是“指针数组”,这个变量就是一个数组。

数组指针:数组指针可以说是“数组指针”,这个变量就是指针。

第三,数组指针是指针的数组吗?

没错。

数组指针是指向数组地址的指针,本质是指针;指针数组是元素为指针的数组(例如int *p[4],定义了三个指针:p[0],p[1],p[2],p[3]),其本质是一个数组。数组指针的使用在某些情况下类似于指针数组,所以要注意区别。

p是一个指针变量,指向一个包含四个int元素的一维数组。此时,P的增量是基于它所指向的一维数组的长度。

*(p+i)是一维数组a[i][0]的地址;*(p+2)+3表示a[2][3]的地址(第一行0,第一列0),*(p+2)+3)表示a[2][3]的值。

扩展数据:

只有以下四种类型的值可用于初始化或分配指针:

1.值为0的常量表达式,例如,值为0的整数const对象可以在编译时获得,也可以是0的文字常量。

2.具有匹配类型的对象的地址。

3.另一个对象末尾的下一个地址。

4.另一个相同类型的有效指针。

引用:

百度百科-指针数组

四、如何使用数组指针

可以这样来#include #include #include int main(){char *d[4];d[0]=malloc(1*sizeof(char));strcpy(d[0],\"web\");printf(\"%s\",d[0]);return 0;}此时*d[]为一个指向指针的指针d[0]=malloc(1*sizeof(char));此句话的意思是,分配1个字节的内存空间给d[0],也就意味着d这个数组的第一个元素[0]内保存的是一个1字节空间的地址,因为d[0]指向一个地址!你可以这样理解对于普通的数组(例如 char d[4];),在内存中是这样的变量:内存地址:内容d[0]:0x400000h:\'w\'d[1]:0x400001h:\'e\'d[2]:0x400002h:\'b\'d[3]:0x400003h:\'\\0\'而在此处 char *d[4]; *d[0] = malloc(1*sizeof(char));,是这样的\'d[0]:0x400000h:0x400100hd[1]:0x400001h:0x400101hd[2]:0x400002h:0x400102hd[3]:0x400003h:0x400103h而在内存0x400100h处才保存着\"web\\0\"不好意思,我上面说错了,应该是d[0]:0x400000h:0x400100hd[1]:0x400001h:NULLd[2]:0x400002h:NULLd[3]:0x400003h:NULL而在内存0x400100h处0x400100h:\'w\'0x400101h:\'e\'0x400102h:\'b\'0x400103h:\'\\0\'对应的,你的代码执行后,内存变量应该是这样的d[0]:0x400000h:0x400100hd[1]:0x400001h:0x400104hd[2]:0x400002h:0x400108hd[3]:0x400003h:NULL在内存0x400100处:0x400100h:\'w\'0x400101h:\'e\'0x400102h:\'b\'0x400103h:\'\\0\'0x400104h:随机字符......0x400108h:随机字符以上内存地址是以字节方式内存对齐的,用一些编译器编译后可能地址会有些问题(比如d[0]到d[1]不止差了4,可能是8),但总体框架就是这样!

以上是边肖对数组指针(数组指针的用法)及相关问题的回答。希望数组指针的问题(数组指针的用法)对你有用!

以上就是由优质生活领域创作者 嘉文社百科网小编 整理编辑的,如果觉得有帮助欢迎收藏转发~