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. SSH项目Class类的注解与属性的注解

    经过一段日子对SSH的学习,为了有利于随时能熟练的把一个SSH的项目快速的搭建起来,并且在报错的时候,将报错信息和解决 方案记录下来,每天一次的代码练习已成为家常便饭 所以,在反复练习的时候,发现Sp ...

  2. 使用Chrome工具来分析页面的绘制状态

    Chrome Canary(Chrome “金丝雀版本”)目前已经支持Continuous painting mode,用于分析页面性能.这篇文章将会介绍怎么才能页面在绘制过程中找到问题和怎么利用这个 ...

  3. C#微信公众号开发-高级接口-之网页授权oauth2.0获取用户基本信息(二)

    C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一) 中讲解了如果通过微信授权2.0snsapi_base获取已经关注用户的基本信息,然而很多情况下我们经常需要获取非关注用户的信息,方法 ...

  4. iOS开发UI篇—UITableviewcell的性能优化和缓存机制

    iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...

  5. canvas 绘制 矩形 圆形

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <tit ...

  6. 连接到CentOS(Linux)服务器ssh、mysql缓慢

    现象: 服务器163与服务器164在同一机柜,双绞线直接连接,从办公室或者服务器163去连机服务器164的ssh.mysql均缓慢,让机房人员查了,无果.而164却正常. 最后发现两个机器/etc/r ...

  7. HTML中head里的内容经浏览器解析后全到body里

    我从linux服务器nginx上把一个网站迁移到windows的IIS上数据什么的都么有问题,配置好rewrite以后,访问网站,发现样式变动了,网站上方空出了一块我用chrome浏览器的审查元素一看 ...

  8. 安装了VS2010 sp1 后再安装ASP.NET MVC 3.0的问题

    安装了VS2010 sp1 后再安装ASP.NET MVC 3.0的问题(Final Result: Installation failed with error code: (0x80070643) ...

  9. BZOJ 4034 BIT & Dfs序

    调了恒久突然发现输出优化忘记带负号了.. 就是差分树状数组维护Dfs序即可. #include <iostream> #include <cstring> #include & ...

  10. supervisor安装配置与使用

    supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...