zoukankan      html  css  js  c++  java
  • C语言基础:C语言指针(6)

    上一节我们讲到了指针和数组, 这次我们来讲解一下指针和字符串, 这次的内容和上一节有相似的地方, 也有全新学习的地方, 让我们一起来看看吧~~


    下面我们来看一个小例子:

    #include <stdio.h>
    
    int main()
    {
        char name[] = "abcde";
        
        name[0] = 'A';
        
        printf("%s
    ", name);
        
        char *name2 = "it";
        
        name2[0] = 'I';
        
        printf("%s
    ", name2);
        
        return 0;
    }


    输出的结果:



    第一个输出的结果为Abcde, 第二个输出不了, 程序直接崩溃了, 这是为什么呢? 按照我们上一节课所学的内容, char *name2指向的地址是"it", 这是没错的, 但为什么不能修改呢? 让我们来仔细研究一下:

    这里涉及到内存的问题, 我们来看看内存有几种常用的方式:

    1. 常量区: 存放一些字符串常量, 比如像char *name2;

    2. 栈: 存放局部变量, 比如像char name[];

    3. 堆: 存放对象, 暂时没有学到


    存放在栈里的变量, 是可以随意赋值修改的, 而存放在常量区里的是不能随意修改, 并且是会缓存起来, 等待随时调用.

    比如:

    char *name = "ab";
    
    char *name2 = "ab";

    其实上面两个指针变量的地址是一样的, 因为是存在常量区里, 当有变量调用, 常量区就会返回给变量调用, 如果没有调用, 则一直存放在常量区, 好处在于不用再重新给该常量字符串重新分配内存.


    我们必须掌握定义字符串的两种知识:

     1> 利用数组

     char name[] = "abcd";

      * 特点:字符串里面的字符是存储在栈上, 是可以修改的

      * 使用场合:字符串的内容需要经常修改

     

     2> 利用指针

      char *name = "ABCD";

      * 特点:字符串其实是一个常量字符串,是存储在常量区里面的, 所以是不能修改

      * 使用场合:字符串的内容不需要修改,而且这个字符串经常使用

     

    这次我们讲到这里, 下次我们继续~~~
  • 相关阅读:
    OC block声明和使用
    OC 内存管理(retain和release)
    OC @class关键字
    OC typedef(起别名)
    OC static 和函数
    OC static 和变量
    java【基础】日期操作
    java【基础】正则表达式
    理解String拼接,+运算符重载的实际效果
    swoole的EventLoop学习
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282889.html
Copyright © 2011-2022 走看看