写之前废话两句。
最近看别的书和程序,编程上越来越受刺激 发现自己也就是知道点儿常识,C语言连门儿都没入呢……所以买了本《C和指针》来看。现在重点是入门的细节 我争取把不会的和错的所有细节都记录下来。争取在7月去公司之前 能实实在在掌握更多基础的东西 而非看更多的页数吧。然后坚持写下去 一定写到最后一章 博客上的笔记不能再半途而废了。
我觉得我这辈子到现在为止 最悲剧的习惯就是:只要能看的懂答案的题 就都认为自己写的出来。以后所有东西全都自己去一行一行的写,可能记录下所有出错的地方 才是做题的意义吧。
7月8号去公司,不管竞争对手有多强 都要顶住压力,然后专注技术和细节,照着写笔记的精神去钻研 一定会慢慢赶超大家的~
书归正传,我按书上出现的顺序 记录我不会的和我错的东西,估计在高手眼里都是骗流量的东西 我就希望我早两天认为这些东西小儿科吧 哈哈。
一:
动态存储分配函数,谭老的书上就提到了4个函数:calloc,free,malloc,realloc。网上查了一下 还有Exit和rand什么的,除了上边几个 用到别的时候再去查吧
二:
- char const *input,
-
...
-
int const conums[]
这两句都是在函数声明里 是实参,主要是const不太明白。
查了一下:const是一个C语言的关键字,它限定一个变量不允许被改变。
最典型的用法是:const使用的基本形式: const char m;限定m不可变。
替换1式中的m, const char *pm; 限定*pm不可变,当然pm是可变的,因此问题中p1++是对的。
书上的解释是:把参数声明为const有两方面作用,1是它声明该函数的作者的意图是这个参数不能被修改,2是它导致编译器去验证是否违背该意图。
看了下网上,const和指针还有带强制转换的指针组合的情况,比较让人头疼……
我现在大概了解到了const是去定义“只读变量”的,而且比如*P是const 但是P扔可变(char const *P);
具体问题在后边的书中有 到时候再返回头来细学吧。
三:
- gets(); puts()
-
getchar();putchar()
书里这么说的:
gets()从标准设备读取字符直到遇到换行符为止;
getchar()读取标准输入的下一个字符,直到遇到文件结束标志或发生错误。
puts()将buffer中的字符输出到标准输出,直到遇到空字符('\0')为止;
putchar(c)将c对应值输出到标准输出。成功的话返回c失败返回EOF
查到一个例子:
如果您輸入了兩個以上的字元,則getchar()會取得第一個字元,並將第二個字元留在緩衝區中,直到您使用getchar()或scanf()再次嘗試取得輸入。
如果想要取得使用者輸入的整個字串,則可以使用gets(),它會取得使用者的輸入字串,不包括按下Enter的換行字元碼,而想要輸出整個字串,也可以直接使用puts(),它在輸出字串後,會直接進行換行,:
- char c;
-
-
printf("請輸入一個字元:");
-
c = getchar();
-
putchar(c);
-
putchar('\n')
-
-
char str[20];
-
-
puts("請輸入字串:");
-
gets(str);
-
puts("輸入的字串為:");
-
puts(str);
说的挺明白的,第一个执行结果
請輸入一個字元:A
A
第二个执行结果:
請輸入字串:
This is a test!
輸入的字串為:
This is a test!
四:
- EXIT_SUCCESS;EOF;EXIT_FAILURE;
这三个都是中定义的,成功返回0 失败返回1
;EOF是End Of File,貌似不同系统值不一样 TC中是-1.
五:
字符串复制:
原型:char * strncpy(char *dest, char *src, n);
功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。
说明:如果n > dest串长度,dest栈空间溢出产生崩溃异常。
把短字符串 复制到长的字符串中,除了覆盖外 其余部分置null;
六:没有结构体名的结构体
- struct student
-
{int num;
-
...
-
}stu[3];
-
______________________
-
struct
-
{int num;
-
...
-
}stu[3];
我试了一下 也允许没有结构体名的结构体,直接调用 stu[i].num 也是可以的
网上一大哥说:这样定义的结构体和一般的结构体变量的区别就是:
1、他不能作为参数传递给一个函数,因为编译器无法对他进行类型检查;
2、也不能使被调用的函数返回一个没有结构体名的结构体变量,原因同1。
看来还是带上结构体名的好,多起个名儿而已。
今天练习题貌似没时间写了,明儿另起一篇文章写写吧,这次所有习题一定仔细做 不能直接翻答案了 哈哈