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

全部博文(160)

文章存档

2012年(25)

2011年(120)

2010年(15)

分类: C/C++

2011-05-30 21:24:26


今天白天学车上法培 晚上回来只够认认真真的看半章,
感觉这书是挺犀利 从第三章开始基本上所有讲的东西就开始体现C语言的指针性,
估计过一遍 然后按他的思路编些小程序能提高不少,继续我的入门笔记 哈哈。


一:字符串常量和指针的关系
书中讲:(以下纯自己理解的 不严格之处长进以后再来改)
使用字符串常量的时候,相当于产生一个“指向字符的指针常量”。
当字符串常量被赋给一个表达式的时候,表达式的值就是字符串的首地址。
如果把字符串常量复制给一个指针(指向字符的),这个指针就指向存储字符串常量的首地址。

就比如把“Hello world”这个字符串常量赋给message指针:

  1. char *message=“Hello world”;
这个就是把message声明成一个指向字符的指针,之后用字符串常量的第一个字符的首地址,对前边的指针进行初始化。

然后数组的数组名和下脚标编号0号的数组名,也是指针,也指向数组的首地址,
所以就不能对这些指针或者指针常量直接赋值,不过可以调用字符串处理的函数,比如:

  1. #include <stdio.h>
  2. #include <string.h>
  3. void main()
  4. {
  5.     char str[20];
  6.     strcpy(str,"hello world");
  7.     puts(str);
  8. }




二:typedef和#define对指针的处理
其实原来typedef就没学好……
  1. typedef char *ptr_to_char;
看见这句就没明白,后来看明白了 意思是:把*ptr声明成一个 指向字符的指针。

然后翻了一下谭老的书 P316是这么解释的:
  1. 1.typedef int NUM[10];        //声明NUM是整形数组
  2.   NUM n;                     //定义n是整形数组

  3. 2.typedef char *STRING;       //声明STRING是字符型指针
  4.   STRING p,s[10];            //定义p是字符型指针变量,s是指针数组

  5. 3.typedef int ( * POINTER)();//声明POINTER是指向函数的指针,并且返回值是int型
  6.  PONITER p1,p2;
然后#define在声明新类型时候 不好使,特别是不太好处理指针
比如:
  1. #define ptr_to_char char *
  2. ptr_to_char a,b,c;
实际上只把a的给声明成指向字符的指针了,B和C被声明成char了




三:const常量(const只读变量)
  1. int const a;
  2. const int a;
这两个等效,不过如果加上指针的时候,位置不同就不等效了
  1. int const *a;//指针的值可变,指针指向的整形值不可变
  2. int *const a;//正好相反

  3. //int const *|a;我在*的右边加了个竖线,(int const *)是整体,表示指针指向的整型值是被const修饰的 所以是只读变量 不可变。指针在外边可变

 //不知道我这自创的理解是不是所有情况下全对,我先这么记着



四:这几十页提到的小技巧,编出来试试
  1. printf("%d\n",strlen(""));
  2. printf("%d\n",sizeof(""));
结果是:

最开始以为strlen()就能查到‘\0’呢,没想到sizeof()。不过死活对不上数……
网上一问才知道strlen()不计‘\0’,意外收获 哈哈。




昨天给总监发邮件 问问方向性的问题,然后得到答复是 7月回公司得对新员工进行编程能力的考试。
那问题就又回到C语言了呗,赶紧好好看看这书 也得挺好。然后邮件回复的落款是R&D Department,感觉这几个字真NB 以后我也得争取弄一个玩 哈哈。
阅读(1788) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~