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的一些总结的更多相关文章

  1. 计算字符数组长度,用strlen 与 sizeof 的原理与区别

    遇到个坑,定义了一个字符数组 unsigned ;i<;i++) { buff[i] = ; } 然后用串口发送函数: write(fd, buff, strlen(buff)); 却发现串口一 ...

  2. java字符数组char[]和字符串String之间的转换

    java字符数组char[]和字符串String之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用String.valueOf()将字符数组转换成字符串 void (){ cha ...

  3. C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size

    #include <stdio.h> #include <string.h> int main() { char a[10] = "\0"; char *p ...

  4. c语言字符数组和指针的经典用法

    1.字符数组 许多情况下,对字符串的处理使用字符数组会更加方便,比如: 我觉得不改变字符串的原有顺序,对字符串进行删除等操作时,使用字符数组效果会更好. eg:给定字符串(ASCII码0-255)数组 ...

  5. GDB调试字符数组时指针和数组区别的体现

    测试ftell函数时发现报错,先贴源码 // File Name: ftell.c #include <stdio.h> #include <stdlib.h> int mai ...

  6. JPasswordField 中得到的字符数组转化为字符串(密码乱码问题)

    转载自:http://blog.csdn.net/skl_tz/article/details/9009805 JPasswordField 用作密码的输入框,似乎很方便,但是,为了得到输入的内容,一 ...

  7. qt 字符数组如何转换字符串?

    char 字符数组如何转换成 QString? char source{1024} = {0}; QString des = QString::fromLocal8Bit(source);

  8. C++ 中 字符数组 和 指针 区别

    char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; c ...

  9. C++数组和指针加减法和sizeof问题

    关于指针和加减法: 指针的加减法:指针的加减法,加多少或者减多少,主要是看所指对象的sizeof值. 例子: double m = 3.0; ; double *p=&m; int* p1=& ...

随机推荐

  1. JS的学习体会与分享

    最近在学习js这门计算机网络的新知识.相比与之前所学习的html和css这两门编程语言,js 还是有很多的不同之处,它相比于前两门知识还是有一定的难度和逻辑性的.今天跟大家分享一篇文章,希望能从中获得 ...

  2. Codeforces #369 div2 D.Directed Roads

    D. Directed Roads time limit per test2 seconds memory limit per test256 megabytes inputstandard inpu ...

  3. C#获取参数getParameter

    昨天遇到了这样一个问题,getParameter时,首次进入页面读取默认值时,本应该读取到“全部”这个字符. 然后在实际读取过程当中却不是这样,实际读取到的是  类的对象值 重新运行时能够读取到 “全 ...

  4. apache认证、授权、访问控制

    认证对象:某一个网站目录. 启用认证 1.即用AllowOverride指令指定哪些指令在针对单个目录的配置文件中有效:AllowOverride AuthConfig 2.设置密码登录访问某个站点或 ...

  5. 关于GSM基站定位

    一、基站定位两个参数 1、什么是LAC:Location Area Code(LAC)地区区域码,用来划分区域 2、什么是CellID:Cell Tower ID(Cid)CellID代表一个移动基站 ...

  6. linux下各种软件的安装过程

    //////知识储备//////////////////////////////////////////////////////////////////// /var 下存放着服务和经常改变的文件 / ...

  7. MySQL主机127.0.0.1与localhost区别总结

    1. mysql -h 127.0.0.1 的时候,使用TCP/IP连接, mysql server 认为该连接来自于127.0.0.1或者是"localhost.localdomain&q ...

  8. java EE实现动态SQL的

    结果图 情况一:

  9. NAT模式下用secureCRT连接虚拟机

    VMWare制作学习系统,或布置模拟网络群组环境,已经比较流行. 注意主机端口要设置成为不同2122,虚拟机端口设置成22 笔者为了给项目组同事,提供一个练习ssh远程连接操作,及方便抓图交流的环境, ...

  10. (转)PhoneGap工作原理及需改进的地方

    原文:http://mobile.51cto.com/web-330900.htm PhoneGap工作原理及需改进的地方 2012-04-18 16:42 佚名 网络整理 字号:T | T 目前开发 ...