@yy0518
2016-03-11T09:05:51.000000Z
字数 1631
阅读 2213
C语言学习笔记
自增、自减运算符除了比a=a+1;的代码看起来更简洁之外还有什么好处吗?
补充:增量运算符通常能产生出更高效的机器代码,因为它与实际的机器语言指令很相似。
为什么main()函数需要一个返回值?(某个人不回答,那我只好自己找答案了)
在C早期标准中,main()函数只可以接受void返回值,但在最新的C99标准中,只有以下两种定义方式是正确的:
int main( void )
int main( int argc, char *argv[ ] )
main()函数返回值必须是int型,才能传递给操作系统。不过C99中,就算最后没有return语句,编译器会自动在生成的目标文件(如.exe文件)中加入return 0.作为一个良好的编程习惯,还是在末尾加上return语句吧,可以有助于判断函数是正常退出还是异常退出。
鉴于某个人给我留的作业,那我先从第五章跳到第十章好了。
1 *和&蠢蠢已经讲过了,先直奔作业里的变长数组(然而VS似乎并不支持变长数组这个新特性,做个作业真是坎坷啊。。)
int a=10;
char seg[a];
seg[a]便是变长数组,数组的长度可以用一个变量来表示。但这并不意味着数组创建后可以修改数组的长度,变长仅仅只是指数组的长度可以用一个变量来表示,与想象中的变长数组相差甚远啊!
注意在声明数组时不可像一般数组一样顺便进行初始化,只能只是单纯的声明,并且表示数组长度的变量必须先被初始化或者说有一个值。
变长数组乍一看真心觉得它就是来找麻烦的,值都不能改变却还叫变长数组,有表示数组长度的变量又有何用?然而其实还是蛮有用的哈~程序可以在运行时再决定需要多大的数组并创建它。尤其是在调用函数参数为数组时,编译器不支持也不能试验了。。。
2 创建数组的三种方法:
(1)用常量表达式表示数组维数来声明数组,可以通过数组名来访问数组元素;
(2)用变量表达式来表示数组维数来声明变长数组,也可以通过数组名来访问数组元素,但只有C99具有这个特性;
(3)调用malloc()函数,声明一个指针,然后用该指针来访问数组元素。
3 malloc()函数
malloc(所需内存字节数);函数负责分配内存,并将所分配内存第一个字节的地址作为函数的返回值,返回值类型为指向void的指针,也称为通用指针。malloc()函数的原型是:void *malloc(size_t size)
如果malloc()找不到所需的空间,则返回空指针。
4 free()函数
malloc()函数负责内存分配,free()函数则负责内存的释放,内存使用完后只有通过free()函数释放后再能再次被分配使用。
函数参数为malloc()返回的地址,或者说是指向分配的内存块的指针。
采用malloc()函数编写一个变长数组,输入
If you were the lion, the fox will deceive you; if you were the lamb, the fox could come to eat you.
输出并统计字数。
#include"stdio.h"#include"stdlib.h"//包含malloc()和free()的函数原型#include"string.h"int main(){int n;char* ptr;printf("Please input the maximum number of chars:\n");scanf("%d",&n);ptr=(char*)malloc(n*sizeof(char));gets(ptr);printf("%s\n",*ptr);//这个有问题??free(ptr);//内存释放很重要return 0;}
运行结果为:
Please input the maximum number of chars:
20
不明白为什么总是内存分配不成功?
下次再接着做吧。。。这一堆乱七八糟的好难啊。。
1 静态存储分配和动态存储分配具体是指什么?
2 空指针和指向void的指针有何区别?