C语言数组与指针问题,很简单!!!

来源:百度知道 编辑:UC知道 时间:2024/05/24 23:47:13
请问:
int *p[10],(*s)[10];
则他们俩有什么区别?请详细说明他们的意思,表达准确一些,最好连作用也说说,能举例最好!谢谢了!!

简单地说,

int *p[10];就是一个二维数组确定了行数(10行),具体每一行有几个元素,可以在程序中动态指定(就像下面的程序使用p[1]=malloc(sizeof(int)*15);将p[1]这一行指定为有15个元素);可以动态建立不规则数组

int (*s)[10];就是一个二维数组确定了每行的元素数量(10个),具体有几行,可以在程序中动态指定(就像下面的程序中使用s=malloc(sizeof(int *)*10); 将s的行数指定为10);

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{ int *p[10];
int (*s)[10];
p[1]=malloc(sizeof(int)*15);
s=malloc(sizeof(int *)*10);
p[1][14]=14014;
s[2][6]=159;
s[3][7]=98;
printf("%d,%d,%d",s[3][7],s[2][6],p[1][14]);

return 0;
}

int *p[10],
定义int型的“指针数组”,由10个指向int型数据的“指针数组元数”组成,10个元数是指针
int (*s)[10];

定义指向10个“一唯数组元数”的指针s,10个元数是int型的

*p[10]指向数组的指针,因为[]优先级比*高,所以先与[]结合,这显然是数组的形式,那么再加一个*,就是指向数组的指针了,*表示此数组是指针类型的,每个数组元素都可以指向一个整形变量
而后面的(*)[10]则是指向一唯数组的指针变量
c语言好久都没看了,以前学的也不好,不知道回答得令你满意否,希望对你有所帮助

int *p[10];就是int* p[10];
int (*s)[10];就是int* s=n