码迷,mamicode.com
首页 > 编程语言 > 详细

C语言的char指针初始化理解

时间:2018-05-03 20:01:57      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:href   允许   随机   系统   全局   局部变量   理解   str   int   

char 指针,也就是char *类型。 其初始化本质上与其它变量初始化没有什么区别,就是赋予其一个初始化的值。
对于指针来说,在C语言中,就是一个地址。区分初始化情况,有四种表象:
1 初始化为空。即
char * str = NULL;
的形式,NULL在C语言中是特定的空指针,其值为0.在C语言中,以NULL作为指针的一个未生效状态,其本身是一个非法的地址值。

2 初始化为常量字符串地址。
char * str = "test";
常量字符串在运行时会被放在常量空间中,于是这样初始化后,地址是常量空间中的一个地址,对于该地址只能读取,不可写入。即str的值可以改,但是str指向的值是不可修改的。
在C语言里面,字符串是一段连续的字符,但是对于"hello"来说,这里的"hello"等同于数组名,所以即使见到printf ("%c","hello[2]);这样的用法也不要奇怪。他等同于char a[10]="hello",printf ("%c",a[2]);
总之,记住,字符串整个写出来在编译器里等同于数组名。但是他和数组唯一的区别,他是只读的。不能通过指针改变它。例如char *p="hello",p[2]=‘y‘,错!字符串只读,不能改变它。但是数组是可以改变的。


3 初始化为变量地址。
这里的变量地址,包括全局变量,局部变量的地址,以及通过动态分配申请到的内存地址
这种情况下,对指针指向的空间是可以修改的。

4 不做初始化。
这种情况在C语言中是允许的。如果为全局变量或静态局部变量,系统默认初始化为0值,即NULL。而对于局部变量,将是一个随机值。所以如果是局部变量不做初始化,在取其指向空间值前,必须为其指定一个合法的值,否则访问会出错。

C语言的char指针初始化理解

标签:href   允许   随机   系统   全局   局部变量   理解   str   int   

原文地址:https://www.cnblogs.com/tudapao/p/8986649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!