字符串和存储区

特别提醒:

  • 注意字符串和字符数组的区别(当初总是混淆)
  • 注意char string[ ] =”shanghai” 和 char *p=”shanghai”的区别(存储区域不一样)
//
//  main.c
//  字符串
//
//  Created by fzl
//  Copyright © fzl. All rights reserved.
//

/*
 1.栈区:保存局部变量:函数里面定义的变量
 2.堆区:手动分配内存
 3.静态区(全局区):静态变量,全局变量
 4.代码二进制区:
 5.文字常量区:常量字符串
 */
#include <stdio.h>

void test1()
{

    /*
     char str[4]
     所有的字符串都是字符数组,但是字符数组不一定是字符串
     */
    char str[4]={'a','b','c','d'};

    char str1[4]={'a','b','c','\0'};


    //定义字符串:以'\0'做结尾标志
    //1.
    char string[10]={'a','b','c','d'};


    //2.
    char string1[10]={"1234567"};

    //3.
    char string2[10]="123456";


    //4.
    char string3[]="1234";

    /*
     这是错的
     char string4[10];
     string4[10]='c';
     */

    //5.字符串不能这么初始化,这个只能叫做字符数组
    //char string4[]={'a','b','c','d'};
}


void test2()
{
    char string1[3]={'i','t','\0'};

    char string[2]={'o','k'};
    int i=0;
    for (i=0; i<2; i++)
    {
        printf("string[%d]=%p\n",i,&string[i]);
    }
    printf("\n");
    for (i=0; i<3; i++)
    {
        printf("string1[%d]=%p\n",i,&string1[i]);
    }

    printf("%s\n",string);


}

void test3()
{
    //指针初始化字符串
    char *p="I LOVE CHINA";

    char *q="I LOVE YOU";


    printf("p=%p\nq=%p\n",p,q);
    // p[0]='r';错的,文字常量区的内容只读
    printf("%s\n",p);
    char string[12]="1234";
}

void printString(char *string)
{

    //string[0]='u';
    printf("%s\n",string);
}

int main()
{
    char string[10]="shangHai";//存储于栈区
    char *p;    
    p="shangHai";//存储于静态常量区,切记return不能返回一个指向“栈区”的引用和指针
    printString(p);
    return 0;
}
发布了30 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/fzl_blog/article/details/69218371
今日推荐