C语言笔记:指针和字符串


笔记创建时间:2018/10/24

用指针表示法创建字符串

#include<stdio.h>
#define MSG "I'm special"
int main()
{
       char *pt = MSG;
       printf("&MSG = %p\n", MSG);
       printf("pt = %p", pt);
       //*(pt + 3) = 'H';
       //printf("Now *pt = %s", *pt);
       //printf("\npt = %p\n", pt);
       //printf("&MSG = %p", MSG);
       return 0;
}

pt的值与字符串的位置相同
字符串常量属于静态存储类别,这说明如果在函数中使用字符串常量,该字符串只会被存储一次,在整个程序的生命周期内存在,即使函数被调用多次。
用双引号括起来的内容被视为指向该字符串存储位置的指针。
初始化数组把静态存储区的字符串拷贝到数组中,而初始化指针只把字符串的地址拷贝给指针。
除非已经保存了字符串的地址,否则当指针指向别处是,就无法再访问该字符串
#define MSG "I'm special"
int main()
{
       char *pt = MSG;
       printf("&MSG = %p\n", MSG);
       printf("pt = %p", pt);
       //*(pt + 3) = 'H';
使用指针修改字符串,这样的行为是未定义的,这样的语句可能导致内存访问错误
因此,建议在指针初始化为字符串字面量时使用const限定符

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据