char* s1 = "hello";//字符串常量

s是一个保存了字符串首地址的指针变量,同时也是字符串的名字,s的内容是第一个字符的地址,当s指向常量字符串时候,内容不能改变(s[1]='y';错的!因为s[1]就是第二个常量字符的地址,这个地址是唯一的,不能改变!),但是整体可以修改(s = "addd"就可以)。

cout << s1 ;// "hello"
cout << *s1; //'h'
cout << s[]; // 'h'
cout << *(s1+); // 'e'

char 2s[] = "goodbye";//字符数组

char s2[]是有连续内存的数组,每个元素是char类型;s2指向的内存区域的地址和容量在生命期里不会改变,但数组里存的内容可以改变。

 //s2操作同s1类似
s2 = s1;//错误!!!数组不能用等号赋值(除了初始化)
s1 = s2;//对

两者在内存里都在末位存了‘\0’

作为形参完全相同:

void function(char* s1);
void function(char s1[]);

为什么改变s1危险?

hello字符串是在编译时候就确定了,所以编译器知道它指的是常量,而且不希望你改变;但是数组只是个存储工具,编译时不知道它里面是什么,所以可以改。

int a=;    //全局初始化区
char *p1; //全局未初始化区
main()
{
int b; //栈
char s[]="abc"; //栈
char *p2; //栈
char *p3=""; //123456\0在常量区,p3在栈上。
static int c=; //全局(静态)初始化区
p2 = (char*)malloc(); //分配得来得10和20字节的区域就在堆区。
strcpy(p1,""); //123456\0放在常量区,编译器可能会将它与p3所向"123456"优化成一个地方。
}

获取字符串长度

sizeof

当参数是数组名时,返回的时候数组内元素的个数,包括'\0';

当时其他变量时候,返回的是变量所占的字节数;

char *str1="absde";
char str2[]="absde"; int len1 = sizeof(str1);//4,因为str1是字符指针变量,占4个字节
int len2 = sizeof(str2);//6,str2是字符数组名,当sizeof参数是数组名时,返回数组长度(包括'\0')=6

所以求字符串常量的长度,使用strlen;求字符数组的长度,使用sizeof,strlen都可以。

strlen

参数必须是字符型指针,当数组名作为参数传入时,实际上数组就退化成指针了。

返回字符串的长度,而strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。

char *str1="absde";
char str2[]="absde"; int len1 = strlen(str1);//5,strlen不包含'\0'
int len2 = strlen(str2);//5,strlen不包含'\0'

char* 和 cha[]的更多相关文章

  1. C语言 位运算

    1G=1024M; 1M=102KB; 1KB=1024B(字节); 1B=8bits(位); #include<stdio.h> #include<stdlib.h> //C ...

  2. 字符串转成int数组

    package lianxi; import java.awt.image.ConvolveOp; public class ZhengshuShuzu { public static void ma ...

  3. 正则表达式小结(Regular Expressions)

    (原创文章,谢绝转载~) 日常开发中,常用正则表达式方便的进行匹配.筛选工作.正则的常用内容有: 一般情况下原则:从左至右,越多越好(贪婪) 字符:转义:\ ,如 \*,\d (数字)等 选择,cas ...

  4. Java数据结构和算法(四)——栈

    前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入.删除和查找性能都比较好.对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比 ...

  5. 大数字加法(hduoj)

    Problem Description I have a very simple problem for you. Given two integers A and B, your job is to ...

  6. Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词

    日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: //如下是第一 ...

  7. Java数据结构和算法(四):栈

    一.简介 栈(英语:stack)又称为堆栈或堆叠,栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入栈底(Bottom),最后的数据在 ...

  8. HDU 3720 Arranging Your Team

    先分组,然后暴力:注意  初始化时不要为0 会有负数:我直接二进制枚举: dfs是正解:呵呵 #include <iostream> #include <cstdio> #in ...

  9. web 页面 验证码 实现

    1. 前台页面代码:  页面刷新时会自动请求 ${pageContext.request.contextPath}/yanzheng?yz=&time=-1111 这个action <f ...

随机推荐

  1. golang md5 结果类型

    golang  md5 结果类型 package main import ( "crypto/md5" "encoding/hex" "fmt&quo ...

  2. js面向对象程序设计之继承

    在面向对象语言中继承分成两种:接口继承和实现继承.解释一下,接口继承只继承方法的签名,而实现继承则是继承实际的方法.但是ECMAScript中的函数没有签名所以无法进行接口继承,只能是实现实现继承.而 ...

  3. .aspx和.aspx.cs之间的区别

    在vs里面创建一个web窗体会产生两种文件:后缀是.aspx和.aspx.cs. 简单的来说,.aspx是表现层,可以简单理解为是写html代码的,界面的设计部分:.cs是对应的逻辑代码,再通过特定的 ...

  4. SpringBoot使用RestTemplate

    SpringBoot使用RestTempate SpringBoot使用RestTemplate摘要认证 SpringBoot使用RestTemplate基础认证 设置pom引用 <?xml v ...

  5. [19/05/14-星期二] HTML_body标签(列表标签和图片标签)

    一.列表标签 <!-- 快捷键 1.<meta charset="UTF-8"/> 用m6可直接写出 2.复制当前1行到下一行 ctrl+shift+R --&g ...

  6. 剑指Offer编程题(Java实现)——二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  7. 【洛谷 p2672】推销员

    推销员[题目链接] 好了为了凑字数先把题目复制一下: 好了题解第一篇正解: 首先输入,莫得什么好说的: scanf("%d",&n); ;i<=n;i++) scan ...

  8. POJ-1502 MPI Maelstrom 迪杰斯特拉+题解

    POJ-1502 MPI Maelstrom 迪杰斯特拉+题解 题意 题意:信息传输,总共有n个传输机,先要从1号传输机向其余n-1个传输机传输数据,传输需要时间,给出一个严格的下三角(其实就是对角线 ...

  9. kafka+hbase+hive实现实时接入数据至hive

    整体架构: 项目目标,实现配置mysql,便可以自动化入湖至Hive,入湖至Hive方便后期数据分析. 首先在Mysql中配置好kafka的topic.Server以及入户表等信息,java程序初始化 ...

  10. 配置sde使可以使用sde sql(ST_Geometry)操作空间数据

    用处:进行此配置后,可以用sql语言,与sde空间数据库进行空间查询,增删改图层的要素等 PS:同时也是解决 ORA-28595Extproc 代理 DLL 路径无效 的方法 ORA-06512: 在 ...