指针数组和数组指针的区别有哪些?

作者&投稿:贸到 (若有异议请与网页底部的电邮联系)
关于指针数组和数组指针的,用法和区别~

关于两者怎么用?有什么区别?推荐看c专家编程。里面有两章对此描述的非常详细。如果想弄明白,就要自己对怀疑的地方编程练习,很快就会弄懂。在这里就不班门弄斧了。

关于接下来的两个问题:
int (*p)[4]; 对于声明,c专家编程也进行了详细的介绍--可以参考。
上面的声明是说: p是一个指针,指针指向一个数组,数组的大小为4,数组元素的类型为int型。

int *s[] = {&a, &b, &c, &d, &e};
首先说一下int *s[]是什么意思: s是一个数组,数组元素的类型为指针,指针指向一个int型的值。
你这样给数组初始化,单就这一表达式来看是不错的。但是对于初始化的变量a, b, c, d, e你有没有在初始化前定义,并且它们的类型应该是int型。
如下所示:
int a = 1, b = 2, c = 3, d = 4;
int * ptr_arr[] = {&a, &b, &c, &d};
这样就不会出错了。

数组指针和指针数组的区别
数组指针(也称行指针)
定义 int (*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。
如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
所以数组指针也称指向一维数组的指针,亦称行指针。
指针数组
定义 int *p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++)
p[i]=a[i]
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。
这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。
比如要表示数组中i行j列一个元素:
*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]
优先级:()>[]>*

指针数组:表示的是一个数组,数组中每一个变量都是指针型变量。数组指针:表示的是一个指针类型的变量,这个指针变量指向的是一个数组。

指针数组和数组指针的区别主要有以下几点:

1、数组名不可以改变,而指向数组的指针是可以改变的。字符串指针指向的字符串中的字符是不能改变的,而字符数组中的字符是可以改变的。求数组长度时,借用数组名可求得数组长度,而借用指针却得不到数组长度。

2、数组名的指向不可以改变,而指向数组的指针是可以改变的。因为数组名的指向是不可以改变的,使用自增运算符自增就会改变其指向,这是不对的,数组名只能指向数组的开头。

3、指针数组是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。数组指针是一个指针,它指向一个数组。在32位系统下永远是占4个字节,至于它指向的数组占多少字节。

4、字符串指针指向的字符串中的字符是不能改变的,而字符数组中的字符是可以改变的。指针数组本身就是个数组,只不过呢,它里面存放的数据类型不是int,也不是char这类基本类型,而是一个指针类型,说白了就是地址。

扩展资料:

对于指针数组,首先,它是一个数组,知道数组的元素是一个指针,换句话说,数组存储一个指针。此外,数组本身的字节数由数组本身决定;

数组指针,首先它是一个指针,数组指针的指针数组,也就是说,它是一个指针指向一个数组,唯一可以确定的是它是4个字节在32位系统中,但多少字节是指向一个数组,这不是确定的,它取决于情况。



指针数组:表示的是一个数组,数组中每一个变量都是指针型变量。数组指针:表示的是一个指针类型的变量,这个指针变量指向的是一个数组。

数组指针的本质就是一个指向数组地址的指针。所占内存空间大小为4char(*p),这里的p指向一个含有4个char类型的数组。

假设char a[4]={'a','b','c','d'},数组的地址和数组中首元素的地址相同,a+1是在数组移动一个元素的长度,移动距离为1,而p+1是是移动一个数组的长度,移动距离为4。

关于二维数组和指针的关系,二维数组的本质是一个二维指针,例如    char  a[2][3]  ,char **p=a,*p(i)+j  是指向元素p[i][j]的地址,等同于a[i]+j,*(*p(i)+j)表示a[i][j]元素,等同于*p[i][j],*p(i)是指向数组第i行的地址,*p是表示二维数组的地址。



他们的区别是:指针数组,表示的是一个由指针变量组成的数组也就是说其中的元素都是指针变量,而数组指针表示的是这是个指向数组的指针。

那么该指针变量存储的地址就必须是数组的首地址得是个指向行的地址,比如a[3][4]数组中的 a,a+2 等,不能是具体的指向列的地址,如 &a{2][1], &a[2][1] 这类地址。

指针数组:

指针数组可以说成指针的数组,这个变量是一个数组。其次指针修饰这个数组,意思是说这个数组的所有元素都是指针类型,在 32 位系统中指针占四个字节。

数组指针:

数组指针可以说成是数组的指针.这个变量是一个指针。其次数组修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。

根据上面的解释可以了解到指针数组和数组指针的区别,因为二者根本就是种类型的变量。



指针数组和数组指针的区别主要有以下几点:

1、数组名不可以改变,而指向数组的指针是可以改变的。字符串指针指向的字符串中的字符是不能改变的,而字符数组中的字符是可以改变的。求数组长度时,借用数组名可求得数组长度,而借用指针却得不到数组长度。

2、数组名的指向不可以改变,而指向数组的指针是可以改变的。因为数组名的指向是不可以改变的,使用自增运算符自增就会改变其指向,这是不对的,数组名只能指向数组的开头。

3、指针数组是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。数组指针是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节。

4、字符串指针指向的字符串中的字符是不能改变的,而字符数组中的字符是可以改变的。指针数组本身就是个数组,只不过呢,它里面存放的数据类型不是int,也不是char这类基本类型,而是一个指针类型,说白了就是地址。




指针数组和数组指针的区别有哪些?
指针数组和数组指针的区别主要有以下几点:1、数组名不可以改变,而指向数组的指针是可以改变的。字符串指针指向的字符串中的字符是不能改变的,而字符数组中的字符是可以改变的。求数组长度时,借用数组名可求得数组长度,而借用指针却得不到数组长度。2、数组名的指向不可以改变,而指向数组的指针是可...

数组指针和指针数组有什么区别( )。
数组指针只是一个指针变量,它占有内存中一个指针的存储空间,而指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

指针数组和数组指针的区别
指针数组和数组指针是两种不同类型的概念。在定义和使用上有所区别指针数组是一个数组,其中的每个元素都是指针类型,而数组指针是一个指针,它指向一个数组的首地址指针数组的声明方式为“typearray”,而数组指针的声明方式为“type(ptr)[size]”。指针数组:指针数组是一个数组,其中的每个元素都是指...

指针数组和数组指针的区别有哪些?
要理解指针数组和数组指针之间的关键区别,首先要明确它们的概念。简单来说,指针数组就像一个特殊的容器,其中每个元素都是一个指向其他变量的内存地址,每个地址都对应数组中的一个元素。而数组指针则是个体的概念,它本身是一个变量,这个变量的类型是特定数组的地址或引用。首先,指针数组的核心是数组,...

数组指针和指针数组的区别
数组指针,是指向数组的指针。通常所说的数组指针,只是一个指针,他只能存放一个地址。一般用于多维数组。举例说明,假设有一个四行五列的二维数组A,C语言认为它是由四个五元素的一维数组首尾相连组成的。当定义一个数组指针P时,让p指向二维数组的首地址,其实他指的也是第一个一维数组的首元素地址,...

指针数组和数组指针的区别
指针数组是数组,它的元素是指针;而数组指针是指针,可以用来指向数组。如:int a,b,c;\/\/ptarr是指针数组,它有3个元素,每个元素都是指针,分别保存了a、b、c的地址 int *ptarr[]={&a,&b,&c};再如:int arr[]={1,2,3};\/\/arrpt是数组指针,它可以指向一个具有3个int型元素的数组...

c语言指针数组和数组指针的区别
对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体...

指针数组与指向指针的指针有什么区别
在 32 位系统中指针占四个字节。数组指针:数组指针可以说成是数组的指针.这个变量是一个指针。其次数组修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。根据上面的解释可以了解到指针数组和数组指针的区别,因为二者根本就是种类型的变量。

指针数组和数组指针的区别
本文主要探讨了指针数组和数组指针这两种概念,它们在内存管理和操作上有所不同。首先,让我们理解"数组指针",它是一个特殊的指针,其类型直接指向数组,例如在给定的程序中,`int (*p)[2];` 定义了一个指向2x2整数数组的指针。当我们用`p = a;` 这样赋值时,指针`p`指向数组`a`的所有元素。

关于指针数组和数组指针的区别?以及用法
1、指针数组——存放指针的一个数组 比如int *point_arr[5];point_arr是一个指针数组,其每个元素point_arr[i]的类型是int 2、数组指针——指向一个数组的指针 比如 int a[3]={1,2,3};int (*pa)[3]= &a;pa是指向数组a的一个指针 ...

焉耆回族自治县13581551567: 数组指针和指针数组的区别 -
艾邢多力: 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度. 如要将二维数组赋给一指针,应...

焉耆回族自治县13581551567: 数组指针与指针数组区别是什么呀? -
艾邢多力: 我假释你先明白了数组和指针的区别(这才是重要的),数组指针就是一个指针,指向的是数组,而指针数组是一个数组,里面的每个元素都是指针.

焉耆回族自治县13581551567: 指针数组和数组指针的区别 -
艾邢多力: 数组指针--指向数组的指针,是一个指针,其指向的类型是数组;指针数组--元素为指针的数组,是一个数组,其中的元素为指针.仔细研读下面的程序:#include int main(void) { int a[2][2] = {{1,2},{3,4}}; int (* p)[2]; char * s[2] = {"hello", "world...

焉耆回族自治县13581551567: 数组指针,指针数组区别!要详细,超详细!我区分了好多次了,还是不清楚啊 -
艾邢多力: 1、在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示).2、指针数组是指一个数组中的每个元素都是一个指针,也就是多维数组.说白了,数组指...

焉耆回族自治县13581551567: C语言中:数组指针与指针数组有什么区别 -
艾邢多力: 类型不一样. 数组指针, 本身是指针 指向数组. 定义方式 int (*p)[4];这样的 p是单独的变量,是一个单纯的指针. p可以被赋值. 指针数组,本质是数组,存一组指针, 比如int *p[4]; p是一个数组, 包含四个int *元素. p不能被赋值. 但p[0]到p[3]可以赋值.

焉耆回族自治县13581551567: 指针数组和数组指针有什么区别
艾邢多力: 给你讲讲我的理解吧 指针数组:数组里的元素全部为指针 ,是一个指针集 例如:int *p[10] p[i]就为第i个元素的指针 数组指针:是指向数组的指针 例如:int(*p)[10] 是指向数组首元素的指针

焉耆回族自治县13581551567: 关于指针数组和数组指针的,用法和区别 -
艾邢多力: 关于两者怎么用?有什么区别?推荐看c专家编程.里面有两章对此描述的非常详细.如果想弄明白,就要自己对怀疑的地方编程练习,很快就会弄懂.在这里就不班门弄斧了.关于接下来的两个问题:int (*p)[4]; 对于声明,c专家编程也进行了...

焉耆回族自治县13581551567: 定义一个指针数组和一个数组指针有什么区别? -
艾邢多力: 指针数组是指数组里的元素是指针,比如char *a[2];a[0]和a[1]是一个char *类型的变量;数组指针是说这个指针指向一个数组,比如char (*a)[2],注意括号不能少,这就代表说a是一个指针,它指向一个数组,数组的大小是2,数组的元素是char类型的.

焉耆回族自治县13581551567: 指针数组与数组指针 的区别及各自解释 -
艾邢多力: 指针数组即指针的数组(主体是数组),是指有一个数组,数组中的每一个元素都是一个指针类型.(类似的,整形数组,就是指数组中的每一个元素是一个整形). 数组指针即数组的指针(主体是指针),意思是有一个指针,这个指针是指向了一个数组的.

焉耆回族自治县13581551567: 指针数组和数组指针的区别是什么?
艾邢多力: 指针数组:指针的数组,数组的元素是指针; int *p[2]; 首先声明了一个数组,数组的元素是int型的指针,这个数组的元素是p[0], p[1]两个整形指针 数组指针:指向数组的指针. int s[2], *p; p = s; 这个数组的元素是2个整型数

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网