首页 > 试题广场 >

关于C语言,下列指针变量的定义和解释,均正确的是

[单选题]
关于C语言,下列指针变量的定义和解释,均正确的是()
  • int  *p[10];    //定义10个指针变量组成的指针数组
  • int  *p();    //定义一个函数的指针,将来可用此指针指向一个函数
  • int  (*p)[];  //定义一个行指针
  • int **p;  //定义一个指针变量,该指针变量可以指一个向二维数组
首先明确一点,“[]"的优先级大于”*"。
如果是int *a[10]  首先a跟[]先结合,所以他是个数组,其次他的数据类型是指向int型的指针变量,所以 int *a[10]是个指针数组。
如果是int (*a)[10]则是一个指针变量指向一个有10个整型数组的指针,所以int (*a)[10]是个数组指针。
发表于 2020-02-03 18:04:34 回复(0)
对于C选项, 错误, int a[2][3]; int(*p)[] = a;报错, 需要给p声明行元素数, 即int(*p)[3] = a;就行, 这样就是一个正确的声明一个行指针的方式.
对于D选项, 错误, 应该同上用行指针指向一个二维数组, 而非一个int型的二级指针.
但是可以使用
int** p = (int**)malloc(sizeof(int*) * SIZE);
for(int i = 0; i < SIZE; i++)
{
    p[i] = (int*)malloc(sizeof(int) * SIZE);
}
指向动态申请的二维数组.

发表于 2020-02-14 11:47:12 回复(0)
int  (*p)[];  //定义一个行指针
选项错误,定义一个行指针的话,需要指定行的维度大小,否则该指针定义错误;
正确定义是:int  (*p)[3];  //定义一个行指针

int **p; //定义一个指针变量,该指针变量可以指一个向二维数组
定义错误,但是此时p可以指向动态分配的内存:
p = (int**)malloc(sizeof(int*) * SIZE);
若要p想指向一个二维数组的话,可以由如下定义:
int a[3][2] = {{1,2}, {3,4}, {5, 6}};
int (*p)[2]; // p是一个行指针,每行2个元素;
p = a; // p指针指向二维数组

如果是int *a[10]  首先a跟[]先结合,所以他是个数组,其次他的数据类型是指向int型的指针变量,所以 int *a[10]是个指针数组。
如果是int (*a)[10]则是一个指针变量指向一个有10个整型数组的指针,所以int (*a)[10]是个数组指针。

int *p(); //定义一个函数的指针,将来可用此指针指向一个函数
定义函数指针,需要知道形参的数据类型,并且需要加括号: int  (*p)(int, int);
函数指针的定义方式为:
函数返回值类型 (* 指针变量名) (函数参数列表);
发表于 2022-01-13 10:45:33 回复(0)
malloc函数是一种分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size个字节的内存空间。malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具***置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。

“[]"的优先级大于”*"。
如果是int *a[10]  首先a跟[]先结合,所以他是个数组,其次他的数据类型是指向int型的指针变量,所以 int *a[10]是个指针数组。
如果是int (*a)[10]则是一个指针变量指向一个有10个整型数组的指针,所以int (*a)[10]是个数组指针。

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

数组指针:a pointer to an array,即指向数组的指针

还要注意的是他们用法的区别,下面举例说明。

int* a[4]     指针数组     

                 表示:数组a中的元素都为int型指针    

                 元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*

int (*a)[4]   数组指针     

                 表示:指向数组a的指针

                 元素表示:(*a)[i]



编辑于 2020-02-21 16:03:14 回复(0)
A


发表于 2019-11-05 12:52:24 回复(1)
B. 这是一个函数声明,函数的返回值是int *,函数指针应该是 int (*p)();
C. 这是一个列指针;
D. 这是一个指向指针的指针,可以指向指针数组,指向二维数组应该使用列指针(C选项);
发表于 2022-03-21 13:43:08 回复(1)

 一个有10指针的数组,该指针是指向一个整型数  int *a[10];

 一个指向有10个整型数数组的指针   int (*a)[10];

发表于 2019-09-06 14:51:27 回复(0)