注册 登录
编程论坛 C语言论坛

指向一维数组的指针是几级指针?

吉姆汤 发布于 2020-06-29 16:26, 4007 次点击

指向一维数组的指针是几级指针?
比如这个数组
int a[5] = {1, 2, 3, 4, 5};


int*p1=&a
对吗?

11 回复
#2
rjsp2020-06-29 16:46
首先“几级指针”的说法就挺外行的,就像郭德纲问火箭燃料属于几级煤。

int a[5] = {1, 2, 3, 4, 5};
int*p1=&a
对吗?

不对!正确的有:
int (*p1)[5] = &a;
int* p2 = a;
int* p3 = &a[0];
等等
#3
吹水佬2020-06-29 16:47
从严格的语言表达来说应该是: int*p1=&a[0]
#4
lin51616782020-06-29 16:51
一级指针这种说法属于简化的口头表达
标准文档中并不存在这样的说法
标准文档中描述 指针类型 书面描述是 指向XXX类型的指针
比如数组指针
int a[5] = {1, 2, 3, 4, 5};
int(*p)[5] = &a;
p是一个指向int(*)[5]的指针 而不是什么一级指针二级指针

int* pInt = NULL;
pInt是一个指向int类型的指针
int** ppInt = NULL;
ppInt是一个指向int*类型的指针
#5
fulltimelink2020-06-29 18:01
不用纠结是几级,指针在使用的时候,“转换”为自己需要的“级别”就行了,比如  qsort 的比较函数 原型

int (*comp)(const void *, const void *)

当你比较的时候就需要具体的情况自己进行“转换”,但是函数传递的还是“1级”指针
#6
ditg2020-06-29 19:05
考试参考书、模拟题上确实有类似的题!!!!!!!!!

反正我是看见一个星就选一级,看见两个星就选二级。
#7
八画小子2020-07-01 12:43
以下是引用ditg在2020-6-29 19:05:56的发言:

考试参考书、模拟题上确实有类似的题!!!!!!!!!

反正我是看见一个星就选一级,看见两个星就选二级。

int a;
int * b = &a;
int * c = (int *)&b;
int * d = (int *)&c;

请问d是几级?
#8
ditg2020-07-01 13:14
回复 7楼 八画小子

1. 对c而言,我认为就是一级指针,您认为呢?别扩大范围,先阅题。

2. 还有写了那么多,请问类似的应用场景是哪里?千万别像我,嘴比脑快就麻烦了
#9
八画小子2020-07-01 15:38
以下是引用ditg在2020-7-1 13:14:24的发言:


1. 对c而言,我认为就是一级指针,您认为呢?别扩大范围,先阅题。

2. 还有写了那么多,请问类似的应用场景是哪里?千万别像我,嘴比脑快就麻烦了


对于第一个问题,请参阅2楼rjsp的说法。
对于第二个问题,没见过不代表不存在。
另外,真心觉得“考试参考书、模拟题上确实有类似的题!!!!!!!!!”这个说法需要再次参考2楼rjsp的说法。

最后,不再想多说什么,因为没有太大必要而已。Just for fun!

[此贴子已经被作者于2020-7-1 15:40编辑过]

#10
ditg2020-07-01 17:47



我等考生苦啊……
#11
l157090912592020-07-02 19:23
一维数组一般都是一级指针
指向二维数组的指针是行指针,它本质上是一个二级指针
int*p1=&a
这种写法是错误的,数组名本身就是一个地址,它代表的数组的首地址 想要用指针p指向数组不用取地址符,直接p1 = a 就好
#12
lin51616782020-07-02 19:50
以下是引用l15709091259在2020-7-2 19:23:39的发言:

一维数组一般都是一级指针
指向二维数组的指针是行指针,它本质上是一个二级指针
int*p1=&a
这种写法是错误的,数组名本身就是一个地址,它代表的数组的首地址 想要用指针p指向数组不用取地址符,直接p1 = a 就好

数组不是指针
指向二维数组的指针 不是行指针
行指针也不是二级指针
&a这个写法没有错误
错的是 p和&a类型不匹配

1