摘要:
今天继续对指针进行探讨,请看下面:函数指针:下面通过一个程序,简单明了的对函数指针有个基本认识:#include void test(int n){ printf("test %d ...\n", n);}int main(void){ void (*f)(int); // 这里的f就是函数指针变量 void (*f2)(int); // 这里的f就是函数指针变量 // 以下两种写法是等价的 f = &test; f2 = test; // 以下两种写法也是等价的 f(100); // 调用函数 (*f2)(200); ... 阅读全文
摘要:
今天继续对于C语言的指针进行学习,话不多说,进入正题。数组作为参数传递【指针传递】:下面通过一系列程序来说明数组作为参数传递是属于指针传弟:一维数组:编译运行,看结果:编译运行:我们知道“数组定义之后,它的首地址是无法重新指向新地址的”,如下:编译:而请看如下情况:编译运行:说明:当一维数组作为函数参数时,有三种写法都等价,都是int*a二维数组:编译:如果省略了二维数会怎样呢?编译:说明:命令行参数:main函数是程序的入口函数,今天来对其参数进行研究,先通过程序来直观的感受下:运行结果:分析一下内存模型:所以,可以通过循环,将命令行的所有参数都打印出来:对于上面的程序,也能用指针的指针来代 阅读全文
摘要:
今天继续对指针进行研究,话不多说,进入正题:指针数组与数组指针:关于这两者的介绍,在http://www.cnblogs.com/webor2006/p/3463918.html有介绍,下面简单回忆下:以下通过一些示例来进一步理解指针数组和数组指针:示例一:输出结果:示例二:运行结果:示例三:输出结果:指针数组与二维数组:基于上面的实现,再来通过一个图来总结下指针数组与二维数组:指针的指针:下面通过一程序来直观的感受下:运行:下面通过一个实例来说明下指针的指针的使用场景:运行结果:上图中可以看到find函数使用了指针的指针,那为什么要用它呢,我用一级指针是否能达到同样的目的呢,来看下面的尝试: 阅读全文
摘要:
今天继续对指针进行学习,正式正入主题:字符指针:对于上面的理论,下面用程序进行论证:输出结果:所以论证了:str1是字符数组变量,str1保存了字符串"cppcourse"str2是字符指针变量,str2并不保存字符串“cppcourse”本身,而是保存常量"cppcourse"的地址编译失败:所说又论证了“由于str2指向的是字符串常量“cppcourse” ,常量不能被更改,因而str2[0] = 'C';将引发错误。”字符数组与字符指针的区别:下面分别从以下几个方面来解析:存储分配读写权限这个上面已经论证过了:字符数组是可读可写的字 阅读全文
摘要:
上次对指针进行了初步认识,接下来,继续挖掘C语言的魂!指针与一维数组:这时编译是没有问题的:编译:输出结果:这里面会有点绕,但很重要,先运行一段程序,再来阐述上面的观点:#include int main(void){ int a[] = {1, 2, 3, 4, 5}; int* p = a; printf("%p\n", a); printf("%p\n", &a); printf("%p\n", a+1); printf("%p\n", &a+1); return 0;}运行结果:结果 a+1 阅读全文
摘要:
经过前面漫长的c语言学习,终于进入了C语言中最核心,最重要的部分啦!其实对于前面的知识,自己都有所了解,必境C语言也是一直在学(只是没学通而已(∩_∩)),但是通过写博文的方式,我发现最好的一个地方就是它能够让你很踏实地去学习,摒弃浮燥,因为你写出来的东西都是自己亲自验证过的,强制让自己把所学的东西... 阅读全文
摘要:
继续进行C语言学习之旅,现在已经快进入了C的核心了,所以需更加细心地学习,言归正传,开始学习:什么是结构体呢?定义结构体类型:注意:结构体最后的分号不能省略这时编译就出错了:结构体变量:当我们定义好了一个结构体类型之后,就可以使用它,类似于基本类型一样,但是:会有一些差别。①使用方式一【用得较少】:注意:struct关键字不能省略,代表该变量是一种结构体类型:这时编译就出错了:②使用方式二【用得较少】:我们可以将结构体声明在函数体内,声明之时就给出变量:③使用方式三【通常用这种方式】:从使用方式一中可以看出,使用起来不是那么方便,有没有解决办法呢?答案当然有,也就是第三种方式,用typedef 阅读全文
摘要:
今天继续学习c语言语法,相对之前的知识而言,这次的知识就比较重要了,算是C语言的核心基础了,所以得好好学它,下面正式开始:存储类别: 它指定了变量生存期(时间)与作用域(空间)对于下面这个函数:运行结果:解析:静态变量,只分配一次内存,离开作用域的时候,生存期并未结束,它的生存期是整个程序的执行期[这也说明作用域和生存期是不一样的],所以上面执行了两次的结果累加了。另外,需要注意:关于这个可以参考博文:http://www.cnblogs.com/webor2006/p/3427567.html,里面有详细的说明。下面有两个C文件:test.c的内容:1_9.c的内容:这时编译两个c到一个可执 阅读全文
摘要:
继上次学完函数之后,这次来通过一个实例来加深印象,下面会对其实现过程进行一一剖新,先看一下什么叫“八皇后问题”具体的算法可以分解为:像上图中第五行就已经出现了死胡同,这时应该退到第四行,重新安放皇后:了解了算法流程,下面一步一步来实现:第一步:#include #define QUEEN_NUM 8int queen[QUEEN_NUM];// 在第y行上放置皇后void place(int y);int main(void){ place(0);//首先从第1行开始放置 return 0;}void place(int y){ }说明一下queen[QUEEN_NUM]数组... 阅读全文
摘要:
我们知道C语言是面向过程的编程语言,函数是C语言中模块化编程的最小单位,学编程的都会知道,所以,没有什么难点,但是对于C的函数,里面还是有一些需我们注意的地方,下面正式开始学习。先来看一个例子,由于它太熟悉了,所以就不从头开始学习了:运行结果:对于这个简单的程序,其中蓝色说明部分是我们需要注意的,对于函数,是需要提前声明的,有以下几点:①如果将声明给去掉,则会给出警告:②如果函数写在调用方之前,则可以省去声明,如下:编译也是能通过的:③ 函数的声明的形参可以省略形参名,只要形参数据类型既可:编译也是能通过的:下面以一个小例子来做为练习---------猜数游戏下面先贴出简单的流程图:具体实现: 阅读全文