摘要:
为什么C语言中的数组参数会退化为指针? 退化的意义: 二维数组参数: 等价关系: 知识点: 传递与访问二维数组示例: 53行传递的参数与形参类型不匹配,访问会出现意想不到的结果。55行也是类型不匹配。 注释掉53、55行,运行结果如下: 小结: 阅读全文
摘要:
指向指针的指针: 问题: 重置动态空间大小示例: 运行结果如下: 二维数组与二维指针: 遍历二维数组: 第28行的等价代换如下: 10-13行的程序是线性的访问一段内存的值。 运行结果如下: 二位数组在内存中是按一维的方式排列的。 数组名: 动态申请二维数组: 运行结果如下: 小结: 阅读全文
摘要:
main函数的概念: 测试程序: 以上四种定义main函数的方法都是正确的。 main函数的本质: 操作系统是希望main函数的有返回值的,这样可以知道main函数的退出状态。 如果程序时异常退出的,在有的系统上面,会得到提示:程序异常退出。 C编译器支持多种不同的main函数原型,因为在早期有C语 阅读全文
摘要:
问题思考: 在二维数组的时候就不能用数组名表达数组首元素了。matrix不再代表数组首元素的地址。 数组类型: int array[5]的类型为int[5],而不是int型。int[5]说明这个数组有5个元素,每个元素类型是int。 定义数组类型: 数组指针: 数组类型和数组指针示例: 第15行的类 阅读全文
摘要:
典型问题1: 下面的程序输出什么?为什么? snprintf将src的信息打印到buf中。 示例如下: 运行结果如下: 输出不符合我们的预期,我们预期输出hello %s。 分析如下: snprintf需要几个变参是由format决定的。 典型问题2: 示例程序如下: 第6行的字符串在编译器处理后会 阅读全文
摘要:
任意的软件开发过程都会涉及到字符串,字符串的概念: ca是字符数组,其他几个都是字符串,因为最后都有'\0'。 示例程序如下: 运行结果如下: 第7、8行的程序,编译器会自动在字符串后面加上'\0'。 所有与字符串相关的操作与函数都依赖于最后的'\0',如果一个字符串没有'\0',那将退化为字符串组 阅读全文
摘要:
数组名可以当做常量指针使用,那么指针是否也可以当做数组名来使用呢? 下标VS指针形式: 示例程序: 第11行将指针当做数组名来使用。 运行结果如下: 可以看到输出结果是正确的。 但是数组和指针是不同的。 示例程序: ext.c文件 当上述程序第5行为extern int a[];时,编译运行结果如下 阅读全文
摘要:
数组的本质: 示例程序: 指针的运算: 指针的比较: 示例程序: 根据以上的分析,14、16、17、18行都是不合法的。15行可以编译通过,但是没有意义,因为两个指针不是指向同一个数组中的元素的。 示例程序: 运行结果如下: 小结: 阅读全文
摘要:
数组的概念: 数组当中的元素没有名字,我们只能通过数组名和下标来访问数组中的元素。数组名a代表的是这5个存储空间的集合。代表的是这一段内存。 数组的大小: 示例程序: 运行结果如下: 当我们指定数组中的一部分元素之后,其他的元素就会被初始化为0,我们可以利用这个特性来讲数组全部初始化为0。做法为in 阅读全文
摘要:
程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间? 下面的程序输出什么? 运行结果如下: i的值发生了改变,但是在程序中,我们没有直接修改i的值,这就是因为指针的操作,通过指针我们改变了i的值。 *号的意义: 小贴士: 指针的使用示例: 运行结果如下: 传值调用与传 阅读全文