Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1253113
  • 博文数量: 160
  • 博客积分: 4132
  • 博客等级: 中校
  • 技术积分: 2086
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-06 21:56
文章分类

全部博文(160)

文章存档

2012年(25)

2011年(120)

2010年(15)

分类: C/C++

2011-05-27 19:47:18

   
   写之前废话两句。

   最近看别的书和程序,编程上越来越受刺激 发现自己也就是知道点儿常识,C语言连门儿都没入呢……所以买了本《C和指针》来看。现在重点是入门的细节 我争取把不会的和错的所有细节都记录下来。争取在7月去公司之前 能实实在在掌握更多基础的东西 而非看更多的页数吧。然后坚持写下去 一定写到最后一章 博客上的笔记不能再半途而废了。
   
   我觉得我这辈子到现在为止 最悲剧的习惯就是:只要能看的懂答案的题 就都认为自己写的出来。以后所有东西全都自己去一行一行的写,可能记录下所有出错的地方 才是做题的意义吧。

  7月8号去公司,不管竞争对手有多强 都要顶住压力,然后专注技术和细节,照着写笔记的精神去钻研 一定会慢慢赶超大家的~

   书归正传,我按书上出现的顺序 记录我不会的和我错的东西,估计在高手眼里都是骗流量的东西 我就希望我早两天认为这些东西小儿科吧 哈哈。



一:
动态存储分配函数,谭老的书上就提到了4个函数:calloc,free,malloc,realloc。网上查了一下 还有Exit和rand什么的,除了上边几个 用到别的时候再去查吧

二:
  1. char const *input,
  2. ...
  3. 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);
具体问题在后边的书中有 到时候再返回头来细学吧。

三:
  1. gets(); puts()
  2. getchar();putchar()
书里这么说的:
gets()从标准设备读取字符直到遇到换行符为止;
getchar()读取标准输入的下一个字符,直到遇到文件结束标志或发生错误。
puts()将buffer中的字符输出到标准输出,直到遇到空字符('\0')为止
putchar(c)将c对应值输出到标准输出。成功的话返回c失败返回EOF

查到一个例子:
如果您輸入了兩個以上的字元,則getchar()會取得第一個字元,並將第二個字元留在緩衝區中,直到您使用getchar()或scanf()再次嘗試取得輸入。
如果想要取得使用者輸入的整個字串,則可以使用gets(),它會取得使用者的輸入字串,不包括按下Enter的換行字元碼,而想要輸出整個字串,也可以直接使用puts(),它在輸出字串後,會直接進行換行,:

  1. char c;
  2.     
  3.     printf("請輸入一個字元:");
  4.     c = getchar();
  5.     putchar(c);
  6.     putchar('\n')

  7. char str[20];
  8.     
  9.     puts("請輸入字串:");
  10.     gets(str);
  11.     puts("輸入的字串為:");
  12.     puts(str);
说的挺明白的,第一个执行结果
請輸入一個字元:A
A
第二个执行结果:
請輸入字串:
This is a test!
輸入的字串為:
This is a test!


四:
  1. EXIT_SUCCESS;EOF;EXIT_FAILURE;
这三个都是中定义的,成功返回0 失败返回1
;EOF是End Of File,貌似不同系统值不一样 TC中是-1.


五:
  1. strncpy( , , );
字符串复制:
原型:char * strncpy(char *dest, char *src,  n);
功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。
说明:如果n > dest串长度,dest栈空间溢出产生崩溃异常。

把短字符串 复制到长的字符串中,除了覆盖外 其余部分置null;

六:没有结构体名的结构体
  1. struct student
  2. {int num;
  3.  ...
  4. }stu[3];
  5. ______________________
  6. struct
  7. {int num;
  8.  ...
  9. }stu[3];
我试了一下 也允许没有结构体名的结构体,直接调用 stu[i].num 也是可以的

网上一大哥说:这样定义的结构体和一般的结构体变量的区别就是:   
  1、他不能作为参数传递给一个函数,因为编译器无法对他进行类型检查;   
  2、也不能使被调用的函数返回一个没有结构体名的结构体变量,原因同1。   

看来还是带上结构体名的好,多起个名儿而已。



今天练习题貌似没时间写了,明儿另起一篇文章写写吧,这次所有习题一定仔细做 不能直接翻答案了 哈哈



阅读(1752) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~