开发者社区> 问答> 正文

c语言 指针初始化的问题?报错

在学习c语言指针的时候,往往会碰到这两者等价写法:

char  *message="hello world!";  //我一开始以为是把数据赋值给*message

========================

char  *message;
message ="Hello world!"; //但是,看了这样的写法后,感觉很困惑了。

经过百度查找资料,反复运行demo,我的理解是这样的:

不论上面的写法,还是下面的写法,实际上是让message这个变量指向"hello world!" 常量的地址。

但是,那能不能写成,下面这样呢?

char  *message;
*message ="Hello world!";

我认为是不可以的,应该会报错,至少是不安全的,因为这个指针没有初始化,就开始,使用了。我在我的ubuntu操作系统上,进行gcc编译,果然发出警告了。虽然编译通过,但是运行后,果然报错,这是符合我预期的。

但是,下面的

int *i;
 *i=12;

居然能编译过(没有警告),而且能运行正常,我就真的迷糊了,我觉得应该警告,而且运行会报错的,可是,不是我预想的这样,这是怎么回事哦?

 

展开
收起
爱吃鱼的程序员 2020-06-07 16:15:52 524 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <ol>
    <li>C语言中没有特定的字符串类型,故通常是将字符串放在一个字符数组中,用一个字符指针,作为这个字符串的引用,指向这个数组的第一个字符。</li>
    <li>字符数组的结束,必须加上'\0',否则,输出字符串时,后继会出现"垃圾"。</li>
    <li>虽然,汉字字符占2个字节,而C语言只认ASCII,但输出过程会进行双字节识别,显示出正确的中文。</li>
    <li>既然楼主已经声明 message 为字符指针,那麽要将一个字符数组"Hello World!"的地址赋予 message,就应当写成:</li>
    

                    message = "Hollo World!"; 

                    应当去掉 message 前面的星号。

    注: int *i; *i=12; 的操作,是将整型指针 i 所指的内存的数值改成 12,指针的指向不变。

    验证代码:

    #include <stdio.h>
    int main(){
    char *open="开源中国";
    char  *message;
    char s[]={'H','e','l','l','o',',','W','o','r','l','d','!','\0'};
    char gar[]={'O','K'}; 
    char *garbage=gar;
    char *str;
    str = "http://c.biancheng.net";
    message=s;
    printf("%s\n",open);
    printf("%s\n", message);
    printf("%s\n", str);
    printf("%s\n", message);
    printf("输出 OK 之后,估计还会有多余的字符信息(垃圾) %s\n", garbage); 	
    }

    输出:

    开源中国
    Hello,World!
    http://c.biancheng.net
    Hello,World!
    输出 OK 之后,估计还会有多余的字符信息(垃圾) OKHello,World!
    

     

                        <pre>
    

    int *i; *i=12;

    指针i没有初始化,里面的地址是未知的,他只是刚好没有崩溃而已,并不是没有错误。

    *message ="Hello world!"; 这句报的是类型错误,*message 是字符(char),"Hello world!"是字符串(char*),类型不同,所以报错,并不是检测到未初始化的指针。改成 *message = 'H'; 就不报错了。

    两段代码都没有初始化指针,运行崩溃是正常情况,没有崩溃只是指针指向的内存刚好是可以写入的。

    2020-06-08 11:19:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多