在网上经常看到一些类似字符串或者sizeof等的公司笔试题,鄙人不才,但也作了一些总结,
这些总结都是在vc2003下测试得到的结果,如果不对,请指出。
1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写
"abc",那么编译器帮你存储的是"abc/0"
2."abc"是常量吗?答案是有时是,有时不是。
不是常量的情况:"abc"作为字符数组初始值的时候就不是,如
char str[] = "abc";
因为定义的是一个字符数组,所以就相当于定义了一些空间来存放"abc",而又因为
字符数组就是把字符一个一个地存放的,所以编译器把这个语句解析为
char str[3] = {'a','b','c'};
又根据上面的总结1,所以char str[] = "abc";的最终结果是
char str[4] = {'a','b','c','/0'};
做一下扩展,如果char str[] = "abc";是在函数内部写的话,那么这里
的"abc/0"因为不是常量,所以应该被放在栈上。
是常量的情况: 把"abc"赋给一个字符指针变量时,如
char* ptr = "abc";