C基础知识--指针类型的常量

来源:互联网 发布:文明6 mac下载 编辑:程序博客网 时间:2024/05/01 16:48

微笑Hi,大家好,楼猪又来更新了。最近有点偷懒,当然也是因为有些问题我自己也还没闹明白,所以不敢乱写。

不过我还是来啦,因为我很水的,写不出什么高深的DD来,啊哈哈~~~

先给大家贴个笑话看看偷笑

某程序员论坛,有一新会员发帖:我一直用C语言,不知道是否已经过时,现在好像都流行C++、C#之类的,我这把年纪了,现在学新语言还来得及不。某人热心回帖:C语言博大精深,其中的奥妙你还没领悟呢,还是把这个学精再说吧。众人纷纷附和。不知为何此帖十分火爆。若干楼之后,楼主回帖:我是谭浩强。

比较冷哈???冷冷更健康。

开工!!!


一、NULL

这是什么?==》(char *) 0  

                     ==》将整数0强制成指针型的常量

有什么用?==》可以用来表示指针没有指向任何目标,即久仰大名的“空指针”。

C编译程序已经用宏定义将它定义为符号常量存储在stdio.h文件中,名称为NULL,耳熟能详的NULL呀!!!


二、指针和无符号整数

计算机系统中的地址实际上是一个无符号整数。

模仿(char *)0,就可以将一无符号整常量经过强制类型转换后变成指针常量


三、指针与字符串常量

C语言中没有字符串类型的数据,所有对字符串的处理都是基于最原始的存储结构即字符数组来完成的,而字符数组就是字符指针。

所以也可以说,C语言中所有对字符串的处理都是通过字符指针来完成的。

而当我们在程序中引用一个字符串常量时,实际上是获取指向该字符串常量首地址的字符类型的指针常量。

#include<stdio.h>void mystr(char *s1,char *s2){printf("%s\n",s1);s2 = s1;printf("%s\n",s2);}int main(void){char *p;mystr("Hello!!!",p);}

程序运行截图:



当我们以 mystr("Hello!!!",p); 调用函数mystr时,实际上给mystr函数传入两个参数,一个是指向存储字符串常量"Hello!!!"的存储区域的首地址的指针常量,另一个指针变量p的值。


BTW,在C程序中写用双引号括起来的字符串常量时,C编译程序会在程序代码的常量区为该字符串常量预留一块存储区域,该存储区域的大小正好等于字符串常量中字符的个数+1,并将字符串常量中的字符顺序存入该区域中并在最后加‘\0’作为字符串的结束标志。


感觉啥也没说。。。。另外,好像指针点击率比较高,我写的不好,我只是整理自己的学习过程,不是为了赚大家的点击率,如果您碰巧被标题吸引进来又觉得啥有用的都没看到,请息怒吧。。。我尽力了。。。



原创粉丝点击