首页 > 试题广场 >

请问下列代码的输出是多少()

[单选题]

请问下列代码的输出是多少() 

#include <stdio.h>
int main() {
    int m[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    int(*p)[4] = (int(*)[4])m;
    printf("%d", p[1][2]);
    return 0;
}


  • 7
  • 3
  • 8
  • 4

这道题首先需要清楚指针数组和数组指针的区别。

C语言中 int*p[4] 和 int(*p)[4]的区别:

int *p[4];  //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。
int (*p)[4];  //定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。

区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。
int *p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组。
int (*p)[n]; 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。
1、int (*p)[4]:定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型); 2、(int (*)[4])m:表示将m强制转换为大小为4的数组指针;
编辑于 2017-08-29 22:44:08 回复(20)
1、int (*p)[4]:表示行指针,单位移动量为4个int类型。即p+1,则一次移动4个int类型
2、(int (*)[4])m:表示以数组指针类型组织m,每4个为一个数组
3、这样一来,m为{{1,2,3,4},{5,6,7,8},{9,0, , }},p指向第一行
4、故p[1][2]即*(*(p+1)+2),表示第二行第三个元素,为7
发表于 2017-08-20 12:36:48 回复(1)
 intm []={1,2,3,4,5,6,7,8,9,0};
    int(*p)[4]=(int(*)[4])m;
    printf(“%”,p[1][2]);
这个题我是这样理解的
1 2 3 4 5 6 7 8 9 0 
p[0]指向1
首先p是一个数组指针,指向的数组的空间大小为4,
1 2 3 4 5 6 7 8 9 0
        p[1]指向5的位置,同时这也是p[1][0], 所以p[1][2]指向7

发表于 2017-08-28 15:20:17 回复(0)
int *p[n] 表示的是指针数组
int (*p)[n]  表示的是一个指向有n个元素数组的指针
(int (*)[4])m  表示以数组指针重新组织数组m,将其每4位划为一组
发表于 2019-04-04 11:11:48 回复(0)
int(*p)[4];------ptr为指向含4个元素的一维整形数组的指针变量(是指针)

int(*)[4];--------实际上可以看作是一种数据类型。也就是第一个(int(*p)[4];)中定义的p的数据类型
1 2 3 4
5 6 7 8 9 0

发表于 2017-08-18 11:08:49 回复(0)
兄弟们,直接报错了,题目都出错了,输出个%,还带了参数,报错的,兄弟,应该是%d
发表于 2021-03-03 21:14:10 回复(0)
我就说这道题怎么会错,原来是答案错了,,
发表于 2022-04-12 18:01:47 回复(0)
int *p[4]; ``//定义一个指针数组,该数组中每个元素是一个int型的指针,每个指针指向哪里就需要程序中后续再定义了。
 int (*p)[4]; ``//定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。或者说指针p的类型为int[4]


具体定义的时候怎么看,看p是与[]结合还是与*结合,*和[]谁的优先级高?[]的优先级高

所谓指针数组,就是指针构成一个数组,这个数组里面存的都是指针

数组指针是:最终落到指针上,只不过这个指针现在指向包含n个元素的数组,数组中的每个元素是int型的。

编辑于 2020-10-29 21:53:44 回复(0)
printf(“%”,p[1][2]);   这个是不是少了个d?
发表于 2020-09-19 10:22:19 回复(0)
数组指针也就是二维数组
发表于 2019-12-05 08:54:43 回复(0)
a)一个整型数(An integer)
    int a; // An integer
b)一个指向整型数的指针( A pointer to an integer)
    int *a; // A pointer to an integer
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)
    int **a; // A pointer to a pointer to an integer
d)一个有10个整型数的数组( An array of 10 integers)
    int a[10]; // An array of 10 integers
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)
    int *a[10]; // An array of 10 pointers to integers
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)
    int (*a)[10]; // A pointer to an array of 10 integers
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
    int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
    int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

而题目中声明的是:int(*p)[4]=(int(*)[4])m; 这是一个指向有4个整型数数组的指针。我们理解为该二维数组的列为4,这样就好理解了。
编辑于 2019-05-08 10:55:50 回复(0)
没人发现printf里边是“%”而不是“%d”么
发表于 2018-12-05 10:57:09 回复(0)
0 1 2 3 0 1 2 3 4 1 5 6 7 8 2 9 0 0 0 一行2列是7
发表于 2018-03-26 16:35:14 回复(0)
用电脑编程是,后面是%d,因此答案是7
编辑于 2018-01-20 11:52:13 回复(0)
aa

发表于 2017-04-24 12:50:08 回复(0)
aaaa
编辑于 2017-04-18 15:34:51 回复(0)