字符串赋值指针变量与普通变量的区别

2023-05-16

普通变量和指针变量用字符串赋值时是有区别的。

特别是数组与字符串,数组名本质上是数组的首地址。在对指针/数组(名)用字符串同样如此,赋值时同样为首地址。

对于普通变量,赋值操作实际上是将一个字符串常量中的字符逐个复制到变量所在的内存空间中,

char name[10];
name = "xiaoming";  // 这样赋值是错误的

这种赋值方式是错误的,因为 name 是一个字符数组,而不是字符指针,所以不能将一个字符串常量的地址直接赋值给它。

正确的赋值方式应该是使用字符串函数来将字符串复制到数组中:

char name[10];
strcpy(name, "xiaoming");  // 将 "xiaoming" 复制到 name 中

其等价于

name[10] = "xiaoming"

对于指针变量,赋值操作是将指针指向字符串常量所在的内存地址,例如:

char *name;
name = "xiaoming";  // 将 name 指向 "xiaoming" 字符串常量的首地址

需要注意的是,这里的字符串常量是存储在常量区的,不能修改。如果需要修改字符串内容,可以使用动态内存分配来分配一段可写的内存空间,并将指针指向这段内存空间的首地址。

同样,在结构体中常用:

struct student{   
  char *name;   
  int score;   
  struct student* next;   
}stu,*stu1;    
这段代码定义了一个名为 student 的结构体,它包含了三个字段:

name:指向一个字符的指针,代表学生的名字
score:一个整数,代表学生的成绩
next:一个指向另一个 student 结构体的指针,代表链表中的下一个学生
此外,还声明了两个变量:

stu:一个 student 结构体类型的变量
stu1:一个指向 student 结构体的指针变量
这里可以看出,stu 是一个结构体类型的变量,而 stu1 则是一个指向结构体的指针类型变量。

在之后结构体赋值时:

int main()
{
    stu1.name = "xiaoming";
    printf("学生stu1的名字为%s", stu1.name);
    return 0;
}

在C语言中,不能在结构体定义之后直接使用大括号初始化,必须在创建结构体变量的时候进行初始化。

如下为错误语法:

struct Student {
    int id;
    char* name;
    int age;
    float goal;
}stu1;

int main()
{
    stu1 = { 100, "xiaoming", 10, 99.2 };
    printf("学生stu1的名字为%s", stu1.name);
    return 0;
}

正确语法如下:

typedef struct Student {
    int id;
    char* name;
    int age;
    float goal;
}Student;

int main()
{
    Student stu1 = { 100, "xiaoming", 10, 99.2 };
    printf("学生stu1的名字为%s", stu1.name);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串赋值指针变量与普通变量的区别 的相关文章

随机推荐

  • antd的Form实例控制表格,表格可收集/回显数据

    大概就是如图的效果 xff0c 但是需要控制数据的收集和回显 首先看到这个页面 xff0c 第一眼就想到table表格 但是我翻阅了下antd的Table组件 xff0c 发现只能展示数据 也有可编辑单元格 但是我需要这里的表格 xff0c
  • 网络字节序、大小端模式

    多字节数据的存储顺序称为字节序 分为大 小端模式 xff1a 大端 xff1a 数据高位对应低地址 小端 xff1a 数据高位对应高地址 可以通过下面的程序 测试自己的机器是大端字节序还是小端字节序 用共用体的方式来测试 xff1a spa
  • C++运算符重载详解

    目录 什么是运算符重载 运算符重载的意义 运算符重载的语法格式 简单例子 43 运算符的重载 代码分析 运算符重载的两种方式 1 重载为类的成员函数 1 双目运算符 2 单目运算符 2 重载为类的友元函数 1 重载格式 2 调用格式 两种重
  • 微信登录老是间歇式失败

    在微信小程的开发中 xff0c 登录问题 xff0c 一定要按照这样的顺序 1 小程序请求login xff0c 拿到code 然后传给服务端 xff1b 2 服务端拿到code 到微信服务器拿到sessionKey xff1b 3 然后小
  • Python爬虫编程7——多线程爬虫

    目录 一 多线程基本介绍 程序中模拟多任务 二 多线程的创建 三 主线程与子线程的执行关系 四 查看线程数量 五 线程间的通信 xff08 多线程共享全局变量 xff09 六 线程间的资源竞争 互斥锁和死锁 互斥锁 死锁 七 Queue线程
  • 嵌入式蓝桥杯客观题总结(4.19)

    1 DMA xff08 1 xff09 DMA是否需要经过MCU访问内存 xff1f xff08 2 xff09 在STM32处理器中一个DMA请求 xff0c 至少占用 xff08 xff09 个周期的CPU访问系统总线时间 A 1 B
  • PixHawk 4用作四旋翼DIY调试部分笔记

    PixHawk 4用作四旋翼DIY调试部分笔记 序所使用的设备器件问题整理短暂结语 序 这是用于记录DIY组装的基于PixHawk 4的四旋翼时所遇到的部分有趣的而又比较耗时才能查找或者仍未能查找到解决方案 xff0c 自行针对当下所处环境
  • CentOS虚拟机可以ping通主机,但是主机ping虚拟机请求超时解决办法

    我用ssh连不上虚拟机 xff0c 找了好多博客 xff0c 试了好多方法 xff0c ip都背得了 xff0c 方法也都差不多千篇一律 xff0c 还是没能解决 xff0c 卡了我好几个小时 xff0c 最后在一次无意的尝试中解决了 xf
  • 麦克纳姆轮PID控制原理

    目录 前言 一 什么是麦克纳姆轮 二 运动原理 三 pid控制 一 什么是pid xff1f 二 什么是串级PID xff1f 三 麦克娜姆轮的控制思想 总结 前言 目前很多大学生比赛里面经常都会出现麦克娜姆轮 xff0c 并且麦克娜姆轮在
  • Matlab在线运行网址

    下载正版matlab麻烦 xff0c 耗内存 xff0c 在线的matlab运行器不香吗 xff1f 在线运行网址 打开后是这样的一个界面 然后我们把左边框的内容换成自己的代码之后点击Execute运行就可以在右边显示代码的运行结果了
  • 《手把手教你学嵌入式无人机》——入门航模遥控器使用(MC6C)

    一 MC6C入门航模遥控器简介 六通道MC6C迈克遥控器是普遍使用的一款入门航模遥控器 xff0c 价格较为低廉 xff0c 同时性能比较稳定 xff0c 性价比较高 遥控器与接收机 1 基本参数 xff1a 遥控器 xff1a 遥控范围
  • (一)Jetson Agx Xavier 装系统Ubuntu

    买不到nvidia Agx Xavier 所以用的是rtimes代替 目前是暑假打算做一辆无人车玩玩 拿到手后和树莓派 TX2感觉很像 xff0c 可以直接插鼠标键盘 显示器网线等还是很方便 虽然不是原厂 xff0c 看手册应该是 nvid
  • (三)Jetson Agx Xavier 串口使用

    暂时没有需要串口的地方 xff0c 不过先写在这备用 xff0c 主要就是配置一下 dev ttyTHS1这里的串口 xff0c 波特率 xff0c 奇偶校验这些 xff0c 比较简单 xff0c 和正常的电脑配置串口差不多 uart py
  • Ubuntu18.04实现ROS安装及小海龟实例

    目录 一 ROS简介1 含义2 发展 二 ROS安装1 添加软件源2 添加密钥3 安装ROS4 初始化rosdep5 设置环境变量 三 小海龟实例1 运行小海龟2 话题器查看节点信息3 控制量移动海龟4 C 43 43 程序编写小海龟圆形
  • iviewadmin本地调试线上接口

    修改vue config js文件 xff1a devServer proxy 39 adminapi 39 target 39 这里写自己的域名 api 39 changeOrigin true pathRewrite function
  • ESP32之FreeRTOS--任务的创建和运行

    文章目录 前言一 创建任务和删除函数1 xTaskCreate 2 xTaskCreateStatic 3 xTaskCreateRestricted 4 vTaskDelete 二 任务函数和任务控制块TCB1 任务函数模板2 TCB 三
  • Linux之V4L2驱动框架

    目录 一 V4L2简介 二 V4L2操作流程 1 打开摄像头 2 查询设备的属性 能力 功能 3 获取摄像头支持的格式 4 设置摄像头的采集通道 5 设置 获取摄像头的采集格式和参数 6 申请帧缓冲 内存映射 入队 xff08 1 xff0
  • C语言 多个文件同时使用一个全局变量

    在做嵌入式实验时 xff0c 需要在多个文件中修改同一个全局变量实现程序控制 xff0c 方式如下 xff1a 在某个头文件中声明全局变量 例 xff1a 文件名 xff1a status h span class token macro
  • Java实现简单赛事通知(大二水平)

    目录 前言 代码 总结 前言 实验目的与要求 了解接口与多态的应用场景 xff0c 熟练掌握接口的定义与实现类的编写 xff0c 了解面向对象的设计原则 xff0c 能够灵活应用接口 继承和组合构建更具弹性的软件架构 xff0c 初步体验面
  • 字符串赋值指针变量与普通变量的区别

    普通变量和指针变量用字符串赋值时是有区别的 特别是数组与字符串 xff0c 数组名本质上是数组的首地址 在对指针 数组 xff08 名 xff09 用字符串同样如此 xff0c 赋值时同样为首地址 对于普通变量 xff0c 赋值操作实际上是