字符串常量

char* s = "Hello,world!"

我们先看一段代码

#include<stdio.h>int main(void) {char *s = "Hello World";s[0] = 'B';printf("Here!s[0]=%c\n", s[0]);return 0;
}

我在这里编译时会报错,老师这里竟然时通过的,网上查了下,有两种方案,有几种方案,我是用了const 改变为常量

[Warning] deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

#include<stdio.h>int main(void) {const char *s ="Hello World";//s[0] = 'B';const char *s2 ="Hello World";printf("s=%p\n", s);printf("s2=%p\n", s2);printf("Here!s[0]=%c\n", s[0]);return 0;
}

输出结果:

s=00404000
s2=00404000
Here!s[0]=H

从这里我们可以看出,他们在内存中的地址是一样的,我们再添加一个i

#include<stdio.h>int main(void) {int i=0;const char *s ="Hello World";//s[0] = 'B';const char *s2 ="Hello World";printf("i=%p\n", &i);printf("s=%p\n", s);printf("s2=%p\n", s2);printf("Here!s[0]=%c\n", s[0]);return 0;
}

i=0062FE94
s=00404000
s2=00404000
Here!s[0]=H

这里可以看出i的地址比s和s2的地址要大很多,i是本地变量,它比较大,而s和s2很小它们存放在内存中的代码段
并且是只读属性,所以刚才我们那里有报错,因为是只读的不可修改的

字符串常量

char s =“Hello World”;
· s是一个指针,初始化为指向一个字符串常量;
**· 由于这个常量所在的地方,实际上s是const char
s,但是由于历史原因,IDE接受不带const的写法**
· 但是视图对s所指的字符串写入,会导致严重后果
· 如果想要修改则需要这样的写法
char s[] =“Hello World”;

下面我们来试试

#include<stdio.h>int main(void) {int i=0;const char *s ="Hello World";//s[0] = 'B';const char *s2 ="Hello World";char s3[] = "Hello World";printf("i=%p\n", &i);printf("s=%p\n", s);printf("s2=%p\n", s2);printf("s3=%p\n", s3);s3[0] = 'B';printf("Here!s3[0]=%c\n", s3[0]);return 0;
}

输出结果:

i=0062FE94
s=00404000
s2=00404000
s3=0062FE88
Here!s3[0]=B

我们看到s3也在一个比较大的地方,同时也是可以修改的
那么,当我们需要一个字符串的时候,我们该如何写了?

指针还是数组
· char *str = “Hello”;
· char word[] = “Hello”;
· 数组:这个字符串在内存固定区域地址
· 作为本地变量空间会被自动回收的
· 指针:这个字符串不知道在内存那一块
· 处理参数
· 动态分配内存空间

从这里可以得出:
如果要构造一个字符串,需要用数组
如果要处理一个字符串,需要用指针

char 是不是字符串*

· 字符串可以表达char*的形式
· char*不一定是字符串
· 本意是指向字符的指针,可能指向的是字符
· 只有它所指的字符数组有结尾的\0,才能说明它所指的是字符串

翁恺老师C语言学习笔记(十一)字符串_字符串常量相关推荐

  1. 翁恺老师C语言学习笔记(十一)字符串

    字符数组 如果我们定义了这样的一个字符数组 char word[] = {'H','e','l','l','o','!'}; word[0] H word[1] e word[2] l word[3] ...

  2. 翁恺老师C语言学习笔记(十)指针_指针与数组

    传入函数的数组成了什么? · 当我们向一段函数传入数组变量,参数接收到的是值,如果我们传入指针时,参数接收到的是也是值(一个地址): · 如果传入函数的是一个普通变量,它接收到的是一个值 · 如果传入 ...

  3. 翁恺老师C语言学习笔记(十)指针_指针的使用

    指针的应用场景一 · 交换两个变量的值 void swap(int *pa, int *pb);//定义指针*pa和*pb int main(void) {int a = 5; int b = 6;s ...

  4. 翁恺老师C语言学习笔记(十)指针_指针变量就是记录地址的变量

    指针变量就是记录地址的变量 scanf函数 · 如果能够将取得的变量的地址传递给一个函数,能否通过这个地址在那个函数内访问这个变量 · scanf("%d", &i) · ...

  5. 翁恺老师C语言学习笔记(十)指针_运算符取得变量的地址

    指针(一) 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指 ...

  6. 翁恺老师C语言学习笔记(九)数组的运算

    · 在一组给定的数据中,如何找出某个数据是否存在? 先看一段代码 #include<stdio.h> /* 找出key在数组a中的位置 @param key 要寻找的数字 @param a ...

  7. 翁恺老师C语言学习笔记(七)函数

    题目:求出1-10.20-30.35-45的三个和 #include<stdio.h>int main() {int i;int sum;for(i=1,sum=0;i<10;i++ ...

  8. 翁恺老师C语言学习笔记(十)指针_指针运算

    我们先看一段代码 #include <stdio.h>int main(void) {char ac[] = {0,1,2,3,4,5,6,7,8,9,};char *p = ac;pri ...

  9. 翁恺老师C语言学习笔记(八)数组

    · 如何写一个程序计算用户输入的数字的平均数 用户输入正整数,并计算输入数字的平均数,如果输入"-1"表示输入结束: #include<stdio.h>int main ...

最新文章

  1. boost的chrono模块单元测试的测试程序
  2. Golang 入门 : 数组
  3. C语言不用循环不用递归打印0-999的小程序,你看懂了吗?
  4. 手机隔空充电,会有辐射吗?
  5. swarm 本地管理远程_带有WildFly Swarm的远程JMS
  6. 台湾高僧称游戏中杀人是罪业死后要下地狱
  7. 用nodejs向163邮箱, gmail邮箱, qq邮箱发邮件, nodemailer使用详解
  8. Hadoop Hive概念学习系列之HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)(十八)...
  9. Python之UDP通讯简单例子
  10. jni android rect.h,解决 fatal error: jni_md.h: No such file or directory #include “jni_md.h”
  11. raft算法_学习分布式一致性协议:自己实现一个Raft算法
  12. 为什么 ofo 彻底凉了?| 畅言
  13. Eclipse IDE的安装与配置
  14. Cesium 编辑空间测量功能,任意修改
  15. 通过命令符查看笔记本电脑的电池损耗
  16. 推荐几个可以免费使用的ChatGPT工具
  17. 公众号头条文章数据接口 API 简介与使用场景、调用方法
  18. 首发 华为Mate7青春版拆机换电池
  19. 联想YOGA 3笔记本如何U盘启动
  20. java导出excel 复杂的 合并单元格

热门文章

  1. windows编程 使用C++实现多线程类
  2. python编程(python调用dll程序)
  3. 搜索引擎的那些事(web遍历)
  4. mysql关闭12260端口_windows 如何查看端口占用情况?
  5. qt5调用python脚本 两次失败_Qt5调用Python脚本中的函数
  6. 电脑编辑安卓分区_如何使用手机APP,编辑文字给屏幕发送节目。
  7. python sort函数返回值_python中 sort方法 和sorted函数
  8. python算法有多少个_Python算法比较两个排序的列表并计算多少个...
  9. python程序框架_Python 程序构架浅析
  10. linux系统上安装toma,Linux-tar - osc_btnnkvs0的个人空间 - OSCHINA - 中文开源技术交流社区...