C语言中char* 和 char []区别
想要把丢掉的东西捡起来,还是很辛苦啊,今天我就发现,我连char* 和 char []的区别都不知道。
很多人觉得这两个定义效果一样,其实差别很大。以下是个人的一些看法,有不正确的地方望指正。
本质上来说,char *s定义了一个char型的指针,它只知道所指向的内存单元,并不知道这个内存单元有多大,所以:
当char *s = "hello";后,不能使用s[0]='a';语句进行赋值。这是将提示内存不能为"written"。
当用char s[]="hello";后,完全可以使用s[0]='a';进行赋值,这是常规的数组操作。
若char s[] = "hello";
char *p = s;
也可以使用p[0] = 'a';因为这是p ==s,都是指向数组的指针。
下面看另外一种定义:
char *s = (char *)malloc(n(www.111cn.net));//其中n为要开辟空间的大小
这句话其实相当于:
char s[n];定义的也是一个指向数组的指针,便可进行数组的下标操作
例子
代码如下 复制代码
#include <stdio.h>
int main(int argc, char* argv[]) {
char* buf1 = "this is a test";
char buf2[] = "this is a test";
printf("size of buf1: %d\n", sizeof(buf1));
printf("size of buf2: %d\n", sizeof(buf2));
return 0;
}
结果是:
$ > ./main
size of buf1: 4
size of buf2: 15
from:http://www.111cn.net/net/c/66247.htm
相关内容
- 2014.02.15解决ASP.NET MVC3与FusionCharts乱码问题
- 2011.01.03asp.net看charipet常用字段与静态方法
- 2011.01.01nchar,char,varchar与nvarchar区别
- 2010.12.26Java 和 C/C++ 中的char 类型长度学习笔记
- 2010.12.25String,PChar,PByte,Array of Char,Array of Byte
- 2009.10.11CString, int, string, char*之间的转换
- 2008.04.26char,TCHAR,WCHAR区别
- 2008.01.12ComponentOne之WebChart用法
C语言中char* 和 char []区别的更多相关文章
- OC语言中BOOL 和 bool 区别
1.类型不同 BOOL为int型: bool为布尔型: 2.长度不同 bool只有一个字节: BOOL长度视实际环境来定,一般可认为是4个字节: 3.取值不同 bool取值false和true,是0和 ...
- C语言中sizeof与strlen区别
本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...
- OGNL表达式语言中的"#"和"$"的区别
Struts2使用标准的Context来进行OGNL表达式语言求值,OGNL的顶级对象是一个Context,这个Context对象就是一个Map类型实例,其根对象就是ValueStack,如果需要访问 ...
- Java语言中null与" "的区别
null是空对象,没有地址,可以赋值给任何对象:""是空字符串,有地址但是里面的内容是空的,只能赋值给字符串对象. 如:String s;//分配了一个内存空间,没存入任何对象 ...
- C语言中puts()和printf()区别
puts的功能更加单一,只能输出字符串:printf的功能更加广,可以格式化数据,输出多种类型的数据. puts()函数用来向标准输出设备(屏幕)写字符串并换行. 调用方式为puts(string): ...
- c语言中 char* 和 unsigned char* 的区别浅析(转)
原文:https://blog.csdn.net/guotianqing/article/details/77341657 背景最近在项目中遇到了一个编译警告,是因为定义的变量为char[],而在使用 ...
- C 语言中char* 和const char*的区别
const char *p = "123"; p[1] = '3'; // 会报错p = "456"; // 不会报错 const char * 只是说指针指向 ...
- C语言中string char int类型转换
C语言中string -- ::) 转载 ▼ 标签: 操作符 int char c语言 类型转换 分类: C/Cpp ,char型数字转换为int型 "; printf(]-');//输出结 ...
- C语言中strcpy(char *strDest, const char *strScr)字符串复制库函数的理解与分析
1.原版的strcpy()函数原型 char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) &am ...
随机推荐
- js设置控件的隐藏与显示的两种方法
js设置控件的隐藏与显示,设置控件style的display和visibility属性就可以了,下面有个示例,需要的朋友可以参考下用JavaScript隐藏控件的方法有两种,分别是通过设置控件的sty ...
- Codeforces Round #313 (Div. 1) A. Gerald's Hexagon 数学题
A. Gerald's Hexagon Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/559/p ...
- Android简单封装类似JQuery异步请求
在android开发中经常会使用异步请求数据,通常会使用handler或者AsyncTask去做,handler 配合message 使用起来比较麻烦,AsyncTask 线程池只允许128个线程工作 ...
- [ES6] 12. Shorthand Properties in ES6
Where destructuring in ES6 allows you to easily get properties out of an object, this shorthand prop ...
- 0c-38-ARC快速入门
2.ARC快速使用 int main(){ Student *s = [[Student alloc] init]; return 0; } 只需要写一行代码,编译器会在合适的位置释放学生对象,程序员 ...
- io cache
http://blog.163.com/digoal@126/blog/static/163877040201571511020418 http://dirlt.com/
- C语言中的各种修饰符
C允许同时使用多于一个的修饰符,这就使得可以创建一下各种类型: int board[8][8];//int数组的数组 int **ptr;//指向int的指针的指针 int *risk[10];//具 ...
- PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况
0x01 背景 首先恭喜Seay法师的力作<代码审计:企业级web代码安全架构>,读了两天后深有感触.想了想自己也做审计有2年了,决定写个PHP代码审计实例教程的系列,希望能够帮助到新人更 ...
- 关于 Android项目“error: Apostrophe not preceded by \ (”的解决方法
用Eclipse环境开发Android项目,如果编译时控制台报出“error: Apostrophe not preceded by \ (”这种错误,那么多半是因为项目中的一个strings.xml ...
- Blocks 推出矩阵公式。矩阵快速密
Blocks 设涂到第I块时,颜色A,B都为偶数的数量为ai,一奇一偶的数量为bi,都为奇数为ci, 那么涂到第i+1快时有 a[i+1]=2*a[i]+b[i]+0*c[i]; b[i+1]=2* ...