字符数组,字符指针,字符串常量,以及sizeof的一些总结
1、以字符串形式出现的,编译器都会为该字符串自动添加一个\0作为结尾
如在代码中写"abc",编译器帮你存储的是"abc\0"。
2、数组的类型是由该数组所存放的东西的类型以及数组本身的大小决定的,如char s1[3]和char s2[4],s1的类型就是char[3],s2的类型就是char[4]
字符串常量的类型可以理解为相应字符常量数组的类型,如"abc"的类型可以看成是const char[4]
3、字符数组和指针的区别
(1)把"abc"作为字符数组的初始值的时候,因为定义的是一个字符数组,所以相当于定义了一个空间来存放"abc",这时候的“abc\0”就不是常量,存放在栈上。
(2)把“abc”赋给一个字符指针变量时,如 char *ptr="abc";因为定义的是一个普通指针,并没有定义空间来存放"abc",这时候"abc"存放在程序的常量区,所以尽管ptr的类型不是const char*,并且ptr[0]='x';也能通过编译,但是执行ptr[0] = 'x';就会发生运行时异常,因为这个语句试图去修改程序常量区中的东西。因此建议的写法是const char *ptr="abc",这样如果后面写ptr[0]='x',编译器就不会让它编译通过,也就避免了上面说的运行是异常了。
4、sizeof是用来求类型的字节数的
如int a;那么无论sizeof(int)或者是sizeof(a)都是等于4
5、对于函数参数列表中的以数组类型书写的形式参数,编译器把其解释为普通的指针类型。
如对于void func(char a[10],int ia[20],char *p)则a的类型是char*,ia的类型是int*,p的类型是char*
对字符数组使用sizeof:
(1)对于char str2[10] = "abcdef"; 就有sizeof(str2) == 10,因为str2的类型是char[10]。---数组名在sizeof中不退化为指针,在strlen中退化为指针。
(2)对于void func(char a[10],int ia[20],char *p);-------- 就有sizeof(a) == sizeof(ia) == sizeof(p) == 4,因为sa的类型是char*,ia的类型是int*,p的类型是char*。---数组名在作为函数参数时,退化为指针,函数只传数组的首地址,并不知道数组的大小,所以sizeof为4
注意sizeof(数组名)在(1)和(2)两种情况下的区别!
字符数组,字符指针,字符串常量,以及sizeof的一些总结的更多相关文章
- 计算字符数组长度,用strlen 与 sizeof 的原理与区别
遇到个坑,定义了一个字符数组 unsigned ;i<;i++) { buff[i] = ; } 然后用串口发送函数: write(fd, buff, strlen(buff)); 却发现串口一 ...
- java字符数组char[]和字符串String之间的转换
java字符数组char[]和字符串String之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用String.valueOf()将字符数组转换成字符串 void (){ cha ...
- C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size
#include <stdio.h> #include <string.h> int main() { char a[10] = "\0"; char *p ...
- c语言字符数组和指针的经典用法
1.字符数组 许多情况下,对字符串的处理使用字符数组会更加方便,比如: 我觉得不改变字符串的原有顺序,对字符串进行删除等操作时,使用字符数组效果会更好. eg:给定字符串(ASCII码0-255)数组 ...
- GDB调试字符数组时指针和数组区别的体现
测试ftell函数时发现报错,先贴源码 // File Name: ftell.c #include <stdio.h> #include <stdlib.h> int mai ...
- JPasswordField 中得到的字符数组转化为字符串(密码乱码问题)
转载自:http://blog.csdn.net/skl_tz/article/details/9009805 JPasswordField 用作密码的输入框,似乎很方便,但是,为了得到输入的内容,一 ...
- qt 字符数组如何转换字符串?
char 字符数组如何转换成 QString? char source{1024} = {0}; QString des = QString::fromLocal8Bit(source);
- C++ 中 字符数组 和 指针 区别
char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; c ...
- C++数组和指针加减法和sizeof问题
关于指针和加减法: 指针的加减法:指针的加减法,加多少或者减多少,主要是看所指对象的sizeof值. 例子: double m = 3.0; ; double *p=&m; int* p1=& ...
随机推荐
- ubuntu MySQL采用apt-get install安装目录情况
安装服务器:root@ubuntu:/# apt-get install mysql-server-5.5 安装客户端:root@ubuntu:/# apt-get install mysql-cli ...
- STM32上移植ds1307笔记
PS:网上关于ds1307的资料最多还是基于51等单片机的,和stm32上还是略有差别,代码是参考了http://www.openedv.com/posts/list/20167.htm 但是他的代码 ...
- spring.xml中的配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Java 概述
一 Java 程序的种类 1)Java 小应用程序(Java Applet) — 在Web浏览器中运行(内嵌Java虚拟机) —特定标记 <APPLET CODE="HelloWorl ...
- VS2010创建WebService的步骤
1.新建网站 ---ASP.NET 空网站 2.添加新项---Web服务..
- JavaEE SSH框架整合(四) 日志处理Spring结合 log4j、slf4j [转]
1. 加入log4j和slf4j的jar包 2. web.xml: <context-param> <!--log4j配置地址 --> <param-name>lo ...
- DeepLearning之路(二)SoftMax回归
Softmax回归 1. softmax回归模型 softmax回归模型是logistic回归模型在多分类问题上的扩展(logistic回归解决的是二分类问题). 对于训练集,有. 对于给定的测试 ...
- 烟草公司基于BPM的IT一体化变革
广州烟草有限公司隶属于广东省烟草专卖局,中国烟草总公司统一领导.垂直管理.主要职能是负责广州市的烟草生产.经营企业和市场的专卖管理.成立20多年来,广州烟草致力于烟叶和卷烟的生产经营.多元化经营.技术 ...
- 使用UISegmentedControl的一个注意事项
NSArray* array = [[NSArray alloc]initWithObjects:@"机会",@"联系人", nil]; //先确定segmen ...
- Psp个人软件开发软件需求分析及用例分析
一.需求分析 1. 业务需求 1.1 应用背景 开发项目进度计划总是那么不明确,延期经常出现,甚至无法给出一个相对比较明确的延迟时间.这样给市场的推广会带来很大的影响,不确定因素使得应对十分困难. ...