今天白天学车上法培 晚上回来只够认认真真的看半章,
感觉这书是挺犀利 从第三章开始基本上所有讲的东西就开始体现C语言的指针性,
估计过一遍 然后按他的思路编些小程序能提高不少,继续我的入门笔记 哈哈。
一:字符串常量和指针的关系
书中讲:(以下纯自己理解的 不严格之处长进以后再来改)
使用字符串常量的时候,相当于产生一个“指向字符的指针常量”。
当字符串常量被赋给一个表达式的时候,表达式的值就是字符串的首地址。
如果把字符串常量复制给一个指针(指向字符的),这个指针就指向存储字符串常量的首地址。
就比如把“Hello world”这个字符串常量赋给message指针:
- char *message=“Hello world”;
这个就是把message声明成一个指向字符的指针,之后用字符串常量的第一个字符的首地址,对前边的指针进行初始化。
然后数组的数组名和下脚标编号0号的数组名,也是指针,也指向数组的首地址,
所以就不能对这些指针或者指针常量直接赋值,不过可以调用字符串处理的函数,比如:
- #include <stdio.h>
-
#include <string.h>
-
void main()
-
{
-
char str[20];
-
strcpy(str,"hello world");
-
puts(str);
-
}
二:typedef和#define对指针的处理
其实原来typedef就没学好……
- typedef char *ptr_to_char;
看见这句就没明白,后来看明白了 意思是:把*ptr声明成一个 指向字符的指针。
然后翻了一下谭老的书 P316是这么解释的:
- 1.typedef int NUM[10]; //声明NUM是整形数组
-
NUM n; //定义n是整形数组
-
-
2.typedef char *STRING; //声明STRING是字符型指针
-
STRING p,s[10]; //定义p是字符型指针变量,s是指针数组
-
-
3.typedef int ( * POINTER)();//声明POINTER是指向函数的指针,并且返回值是int型
-
PONITER p1,p2;
然后#define在声明新类型时候 不好使,特别是不太好处理指针
比如:
- #define ptr_to_char char *
-
ptr_to_char a,b,c;
实际上只把a的给声明成指向字符的指针了,B和C被声明成char了
三:const常量(const只读变量)
- int const a;
-
const int a;
这两个等效,不过如果加上指针的时候,位置不同就不等效了
- int const *a;//指针的值可变,指针指向的整形值不可变
-
int *const a;//正好相反
-
-
//int const *|a;我在*的右边加了个竖线,(int const *)是整体,表示指针指向的整型值是被const修饰的 所以是只读变量 不可变。指针在外边可变
//不知道我这自创的理解是不是所有情况下全对,我先这么记着
四:这几十页提到的小技巧,编出来试试
- printf("%d\n",strlen(""));
-
printf("%d\n",sizeof(""));
结果是:
最开始以为strlen()就能查到‘\0’呢,没想到sizeof()。不过死活对不上数……
网上一问才知道strlen()不计‘\0’,意外收获 哈哈。
昨天给总监发邮件 问问方向性的问题,然后得到答复是 7月回公司得对新员工进行编程能力的考试。
那问题就又回到C语言了呗,赶紧好好看看这书 也得挺好。然后邮件回复的落款是R&D Department,感觉这几个字真NB 以后我也得争取弄一个玩 哈哈。
阅读(1785) | 评论(0) | 转发(0) |