当前位置: 首页 > news >正文

从头开始学C语言第二十八天——字符指针和字符串

C语言通过字符数组处理字符串。通常把char类型的指针变量称为字符指针,字符指针也被用来处理字符串。

初始化字符指针就是把字符串的首地址赋予指针,不是把字符串复制到字符指针。

char a[] = "hello world";

char *pa = a;

*pa指向的不是字符'h',而是字符所在内存的位置。

#include <stdio.h>
#include <ctype.h>

int main()
{
    char a[]="hello world";
    char b[]="apple";
    char *pa = a;

    if(isalpha(*pa))
    {
        if(islower(*pa))
        {
           *pa = toupper(*pa);
        }
        else
        {
            *pa = tolower(*pa);
        }

    }

    printf("%s %p \n",a,a);
    printf("%s %p \n",pa,&pa);

    pa = b;

    printf("%p \n",b);
    printf("%p \n",pa);
    //改变指针所指对象之后,指针所指的对象的地址也会随之改变
    //pa开始指向的是a数组的首地址,后面变成指向b数组的首地址

    return 0;
}

从程序我们可以看到, *pa指向a数组时,我们可以改变a数组的内容。

在C语言中,当一个字符指针指向一个字符串常量,不能修改指针指向对象的值。

#include <stdio.h>
#include <ctype.h>


int main()
{
    char *p1 = "hello world";
    char *p2 = "hello world";
    //指针保存在栈区
    //字符串"hello world"保存在静态存储区,无法修改
    
    //p1[0] = 'a';//系统不会报错,但是运行时系统会崩溃

    printf("%s\n%p\n%p\n",p1,p1,&p1);
    printf("%s\n%p\n%p\n",p2,p2,&p2);

    return 0;

}

存放在静态存储区的变量有:全局变量,static存储类型变量,字符串常量。无法修改

相关文章:

  • 工具层handle_replace
  • Sensodrive机器人力控关节模组SensoJoint在海洋垃圾清理机器人中的拓展应用
  • vector容器以及deque
  • 嵌入式c学习六
  • 硬件基础(5):(2)二极管分类
  • 如何编译鲁班猫(LubanCat 1N)固件
  • HTTP/HTTPS
  • 前端小食堂 | Day18 - 身份认证の八卦阵
  • LORA 中的 梯度外积是什么意思; 方差和协方差的实际含义:衡量变量的离散程度和变量间的线性相关性
  • 信息系统运行管理员教程4--信息系统软件运维
  • 【Linux———线程精讲】
  • electron js node vscode 调试electron
  • 实验4 Vue.js路由实验
  • Can通信流程
  • 【Linux网络-数据链路层】以太网(以太网帧格式|MAC地址+模拟一次性局域网通信+MTU)+ARP协议
  • 09 python函数(上)
  • UE学习记录part7
  • 免密登录远程服务器shell脚本
  • 【Linux】:守护进程化
  • 工具层handle_excel
  • 中方会否公布铁线礁的领海基线?外交部:中方执法活动旨在反制菲方侵权挑衅
  • 央行副行长谈美债和美元波动:单一市场、单一资产的变动,对外储影响总体有限
  • 解放日报头版头条:“五个中心”蹄疾步稳谱新篇
  • 孟泽:我们简化了历史,因此也简化了人性
  • “70后”通化市委书记孙简已任吉林省政府领导
  • 外交部:中方在黄海暂定海域建造渔业养殖设施,同中韩海域划界无关