本文目录
- 指向一维数组的指针与用指针访问数组有什么区别
- 在二维数组中,行指针是指向一维数组的指针变量.
- (*p)[2] 与 *p[2]有什么区别 C语言
- 指向一维数组的指针变量 与指针数组有什么区别
- C语言的疑问 数组指针可以指向一维数组吗如果可以那它就相当于一个简单变量指针 不是数组指针了啊
- 关于C语言中指向由m个元素组成的一维数组的指针变量
- 求大神指教!!C语言用指向一维数组的指针变量,输入并输出该数组的所有元素值
指向一维数组的指针与用指针访问数组有什么区别
1、指向一维数组的指针指定义了指针变量,并给其赋值为一维数组的首地址或数组元素的地址。比如:inta,*p;p=a;或p=&a;当定义了指向一维数组的指针后,就可以使用指针访问数组元素了。也就是说对数组元素的访问方式又多了一种方法。比如前面我们定义了指向一维数组a的指针变量p,我们就可以用*p得到其所指向的数组元素。2、指向一维数组的指针不能访问二维数组中的元素及它们的地址。二维数组中有另外的指针形式定义和访问数组元素。
在二维数组中,行指针是指向一维数组的指针变量.
不是
首先数组名都是数组地址的指针常量。
假设int a这样一个数组,a是普通常量指针,即一维数组指针,其地址类型是 int * 。因此要定义一个指向这个数组的指针p,则其格式为 : int *p;然后就可以赋值了:p=a;(类型一致)。
再假设int b; 然后就也可以赋值了:ptr=b;(类型一致)
这里容易混淆的是,看上去一行数据就是一维数组,所以很多人会将二维数组的一行数据与一维数组的数据混为一谈,其实有差异的,差异在于:行宽不同
我们可以看出一维数组的地址类型为 (type *),没有下标(行宽、数组长度、元素个数),只有定义数组的时候需要给予下标,或者省略下标时必须初始化{1,2,3,4.....},编译器会自动获得下标并分配内存。因此指向一维数组指针也不带下标的,这也就是指针灵活也不安全的原因(数组边界检查及宽度控制完全交给程序员)。然而二维数组中的行宽是确定,也是必须的,因此二维数组的行宽必须明确,因此其指针定义必须包含行宽信息。
type (*) 是行指针类型格式,方括号内的n就是指示行宽,因此行指针不是简单的一维数组指针,而是被限定宽度的一维数组指针,这就是区别。
归纳一下
一维数组指针定义格式:type *p
二维数组行指针定义格式:type (*p)
另外 一维数组指针加一,是递增一个type宽度,二维数组行指针加一,是递增 type宽度*行宽,也就是数据宽度乘一行的元素个数,单位都是字节。
(*p)[2] 与 *p[2]有什么区别 C语言
(*p)是数组指针,p是一个指针,指向一个数组的指针;*p是指针数组,p是一个数组,装载指针的数组。先看‘*’符号、’()’符号和‘’的结合方向是自左向右的,就是说先计算’()’内的。如此,我们先讲(*p)是数组指针;*p是指针数组。
指向一维数组的指针变量 与指针数组有什么区别
中文译得比较绕人,简单说数组的指针本质是指针,指针数组本质是个数组。数组指针:a pointer to an array,即指向数组的指针指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 还要注意的是他们用法的区别,下面举例说明。int (*a) 数组指针 表示:指向数组a的指针 元素表示:(*a) int* a 指针数组 表示:数组a中的元素都为int型指针 元素表示:*a优先级高于*
C语言的疑问 数组指针可以指向一维数组吗如果可以那它就相当于一个简单变量指针 不是数组指针了啊
数组指针可以指向一维数组的。指针本来就是变量,是用来存放地址的变量。如:int (*a);a=b;a++;之后,*a相当于a
关于C语言中指向由m个元素组成的一维数组的指针变量
二维数组也是“数组的数组”所以定义一个指向由m个元素组成的一维数组指针即可指向二维数组的首元素地址。如:char arr = { { ’a’, ’b’ }, { ’c’, ’d’ } };char (*p);p=arr; // p指向首元素地址。char c = *(p+ 1);// 指向0行1列 即字符b
求大神指教!!C语言用指向一维数组的指针变量,输入并输出该数组的所有元素值
#include《stdio.h》int main(){ int array; int i, *p; for(p=array, i=0; i《10; i++) scanf("%d", p+i); for(p=array, i=0; i《10; i++) printf("%d ", *(p+i)); return 0;}