数组指针的用法 数组指针

【数组指针的用法数组指针】今天和大家分享一下关于数组指针的问题(数组指针的用法) 。以下是边肖对这个问题的总结 。让我们来看看 。
首先,数组指针和指针数组的区别
二、指针数组和数组指针的区别
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.另一个相同类型的有效指针 。
引用:
百度百科-指针数组
四、如何使用数组指针
可以这样来# # # int main(){char *d[4];d[0]=(1*(char));(d[0],"web");("%s",d[0]); 0;}此时*d[]为一个指向指针的指针d[0]=(1*(char));此句话的意思是,分配1个字节的内存空间给d[0],也就意味着d这个数组的之一个元素[0]内保存的是一个1字节空间的地址,因为d[0]指向一个地址!你可以这样理解对于普通的数组(例如 char d[4];),在内存中是这样的变量:内存地址:内容d[0]::'w'd[1]::'e'd[2]::'b'd[3]::'\0'而在此处 char *d[4]; *d[0] = (1*(char));,是这样的'd[0]::[1]::[2]::[3]::而在内存处才保存着"web\0"不好意思,我上面说错了,应该是d[0]::[1]::NULLd[2]::NULLd[3]::NULL而在内存处:'w':'e':'b':'\0'对应的,你的代码执行后,内存变量应该是这样的d[0]::[1]::[2]::[3]::NULL在内存处::'w':'e':'b':'\0':随机字符......:随机字符以上内存地址是以字节方式内存对齐的,用一些编译器编译后可能地址会有些问题(比如d[0]到d[1]不止差了4,可能是8),但总体框架就是这样!
以上是边肖对数组指针(数组指针的用法)及相关问题的回答 。希望数组指针的问题(数组指针的用法)对你有用!