首页 > 编程知识 正文

c语言求数组中的最大值和最小值,数据结构c语言版时间复杂度

时间:2023-05-06 13:25:02 阅读:135787 作者:4222

数组名称是什么 数组是指可以连续使用的内存。 例如声明int数组 intarray [ ]={ 1,2,3 }; array代表什么? 根据某资料,数组名是指向数组开头地址的常数指针。 验证一下吧。 sizeof操作符知道一个对象或类型可以返回所占的内存字节数。 例如: int i=1; 那么,sizeof(I )的结果是4 ) 64位计算机下的编译器的一部分是8 ) 那么,打印sizeof (阵列) printf(%d(n ),sizeof )阵列); 结果是12。 但是,大家都知道sizeof (指针变量)==4。 所有结果都是数组名称不是指向数组开头地址的常量指针。 为什么不完整呢,是利用数组访问数组元素的时候。 变得像常数的指针。 例如 array[0]相当于*(array0) 此时,array是指向数组开头地址的常量指针,指针类型是指向数组元素类型的指针。 这里就是int*型 我们可以这样理解: 一所大学的名字叫array。 有人问你array是什么。 你告诉他array是大学,面积多少等等。 但是,如果有人问我怎么去那个,我会告诉你那个的校门(最初的地址)在哪里。 结论数组名称实际上表示内存区域,但在使用时会成为指向数组起始地址的常数指针。 但这里还有另一个小陷阱: #包含 voidfoo(inta[ ) { printf(%d(n ),sizeof(a ) a ); } 入主(void ) )。 { intarray [ ]={ 1,2,3 }; foo (阵列; 返回0; } 输出是4而不是12。 从效率的观点来看,数组参数是参考参数而不是复制参数。 因为数组的长度可能很大,所以复制会占用太多资源。 虽然我是这样的函数 voidfoo(inta[ ) { printf(%d(n ),sizeof(a ) a ); } 在编译器眼里是这样的 voidfoo(int*a ) )。 { printf(%d(n ),sizeof(a ) a ); } 因此,sizeof(a )是sizeof (指针变量)一定是4 双字符数组 我们先来看一下简单的步骤 #包含 入主(void ) )。 { char *str1='abc '; char str2[]='def '; printf(%s(n ),str1 4 ); 返回0; } 输出的结果是def。 我们只要用在c语言里xxxxx

',系统会自动将双引号的内容添加到字符常数区域。

注意: printf(xxxx ); 不会将' xxxx '添加到字符常量字段中。

char *str1='abc '; 将//ABC0添加到字符常数区域,将起始地址分配给str指针变量。

char str2[]='def '; //def被添加到字符常量区域,字符数组的内容也被添加到函数堆栈,其中str2指向堆栈中的数组。

char str[]={'x ',' y ',' z'}; //只需向函数堆栈中添加数组

由于字符常量字段是连续的

printf(%s(n ),str1 4 );

可以打印str2的值。

三维排列

intarray [ ] [3]={ 1,2,3,4,5,6 };

如上所述,使用数组访问元素时,是指向数组元素的指针类型,是指向数组开头地址的指针。

二维数组的元素是数组。

这样写会更容易理解:

intarray [ ] [3]={ 1,2,3 },{ 4,5,6 };

所有这样认为的array都这样认为

int(*ConstArray ) [3];

访问数组元素时

从编译器的角度来看,array[x][y]是*(* ) (arrayx ) )。

*(array x )得到了第x行的类型为“int [3]”(c语言中没有这样的写法)的数组。

数组名称在访问元素时用作起始地址指针。 其中*(arrayx )与数组名称相同。

指针类型int *是指阵列大小(int * ) [3] ) x的地址。

使用*(*(arrayx ) y )访问此数组中的第y个元素。

这些是我对c语言序列的理解。 如果有错误的地方,谢谢您的指出。 请轻轻吹。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。