zoukankan      html  css  js  c++  java
  • 关于char*p与char p[]

    在华为的试题中看到的一个小题目

    类似这样:

    #include "stdio.h"
    char *get_string_1()
    {
        char p[] = "hello world!";
        return p;
    }
    char *get_string_2()
    {
        char *p = "hello world!";
        return p;
    }
    int main()
    {
        char *p;
        p = get_string_1();
        printf("get_string_1:%s ",p);
        p = get_string_2();
        printf("get_string_2:%s ",p);
        return 0;
    }

    主要是关于char*p与char p[]的区别

    1.首先"hello world"是一个字符串常量,存放在静态数据区,是全局的,只读的。

    2.函数1是将一个字符串常量赋值给一个数组p(局部变量),该局部变量p存放在栈中,就是说"hello world"在栈中有了一份拷贝,但函数结束时局部变量p的内存要被清空。

    3.函数2中的的指针是直接指向静态数据区的"hello world",此指针指向的内存在程序中不会被清空。

    4.char *p = "hello world"这样写并不好,最好为const char*p="hello world"。

    附:  char *p1 = "hello world!"; 
               char *p2 = "hello world!"; 
               cout<<p1<<p2<<endl;

    结果是一样的。

                

                     

  • 相关阅读:
    批量插入测试脚本
    Show Profile分析sql语句的资源消耗
    慢查询日志
    ORDER BY优化
    Join查询
    Explain(执行计划)分析
    索引
    MySQL中的DML(数据操作语言)和DQL(数据查询语言)
    MySQL中的DDL(数据定义语言)和DCL(数据控制语言)
    MySQL架构体系介绍
  • 原文地址:https://www.cnblogs.com/zymcpp/p/5861547.html
Copyright © 2011-2022 走看看