现在位置: 首页 > 数组
2018-11-13 16:05 工业·编程 ⁄ 共 1414字 暂无评论
int main() {    char a[5]={'A','B','C','D'};    char (*p3)[5] = &a;    char (*p4)[5] = a;    return 0; } 上面对p3 和p4 的使用,哪个正确呢?p3+1 的值会是什么?p4+1 的值又会是什么?毫无疑问,p3 和p4 都是数组指针,指向的是整个数组。 &a 是整个数组的首地址,a是数组首元素的首地址,其值相同但意义不同。在C 语言里,赋值符号“=”号两边的数据类型必须是相同的,...
阅读全文
2016-06-15 22:57 工业·编程 ⁄ 共 3275字 暂无评论
0长度的数组在ISO C和C++的规格说明书中是不允许的,但是由于gcc 预先支持C99的这种玩法,所以,“零长度数组”在gcc环境下是合法的。 先看下面两个例子。 pzeroLengthArray.c [cpp] view plain copy #include <stdio.h>     struct str  {      int len;      char *s;  };     struct foo  {      str...
阅读全文
2016-06-14 22:53 工业·编程 ⁄ 共 2687字 暂无评论
首先,我们要知道,0长度的数组在ISO C和C++的规格说明书中是不允许的。这也就是为什么在VC++2012下编译你会得到一个警告:“arning C4200: 使用了非标准扩展 : 结构/联合中的零大小数组”。 那么为什么gcc可以通过而连一个警告都没有?那是因为gcc 为了预先支持C99的这种玩法,所以,让“零长度数组”这种玩法合法了。关于GCC对于这个事的文档在这里:“Arrays of Length Zero”,文档中给了一个例子(我改了一下,改成可以运行的了...
阅读全文
今天看见了四种方式://夜晚回来后,又仔细查了资料发现,这个问题还真是个问题,我总结了下总共有八种方式,这里再继续添加四种,重在理解原理。 >>>数组参数传递中的一些问题    最常用的方式 1  、 f(int (*p)[4],int n);     int a[3][4];      f(a,n); 2、f(int p[][4],int n)//这里p[]相当于*p int a[3][4]; f(a,n); //前两种方式是最为推荐的 3、f(int ...
阅读全文
2013-08-29 22:34 工业·编程 ⁄ 共 631字 暂无评论
先来看一个例子: 文件1:int array_a[3]={1, 2, 3} 文件2:extern int *array_a;  printf(“%d”, array_a[2]); 请问输出是多少? 答案是运行时会出错,原因是访问了不可访问的内存。将extern int *array_a改为extern int array_a[]后正常输出。 为什么会出现这样的情况呢? 出现这个问题的原因是编译器对数组和指针的解释是不同的。 使用extern int *array_a; 作声名,编译器会把array_a理解为一个指向int 的指针,对指针...
阅读全文
2013-07-26 06:38 工业·编程 ⁄ 共 2291字 暂无评论
数组降阶是个讨厌的事,这在C语言中是个无法解决的问题,先看一段代码,了解什么是"数组降阶" #include <IOSTREAM> using namespace std; void Test( char array[20] ) {     cout << sizeof(array) << endl; // 输出 4 } int main( void ) {     char array[20] = { 0 };     cout << sizeof(array) << endl; // 输...
阅读全文
2012-12-25 14:21 工业·编程 ⁄ 共 127字 暂无评论
因为数组中各元素内存地址与数组的起始地址的间隔是i*sizeof(一个在数组里的对象)。编译器为了建立正确遍历数组的执行代码,它必须能够确定数组中对象的大小。派生类的长度通常都比基类长。 由于数组成员对象到底是基类还是派生类无法确定,故操作易出现错误。   
阅读全文
2012-12-04 22:25 工业·编程 ⁄ 共 10636字 暂无评论
一、数组求和     给定一个含有n个元素的整型数组a,求a中所有元素的和。可能您会觉得很简单,是的,的确简单,但是为什么还要说呢,原因是这道题要求用递归法,只用一行代码。 分析: 1. 如果数组元素个数为0,那么和为0。 2. 如果数组元素个数为n,那么先求出前n - 1个元素之和,再加上a[n - 1]即可 [cpp] view plaincopy 1.  // 数组求和  2.  int sum(int*a, int n) ...
阅读全文
2012-09-14 22:58 工业·编程 ⁄ 共 3088字 暂无评论
    C++ SDK没有直接提供动态数组功能,虽然可以使用MFC的CArray类,或者用指针+new来实现,但前者需要MFC库,后者使用时不易理解且运行效率低,为此,我把很久前自己写的一个简单的动态数组类贴出来,希望给一些朋友启发。     代码说明:本类在数组成员的赋值和内存分配上作了优化,对大数组的性能有明显提高。     使用方法:将代码复制到头文件CMyArray.h文件中,在项目中引...
阅读全文