char *与char []深度刨析

编译不能通过

#include "iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char *p= "hello" ; //不是把一个字符串赋给了一个字符型的指针,而是把一个字符型的指针指向了字符串的首地址。strcpy(p,"hel"); cout << p << endl; return 0; }//编译通不过constchar *p= "hello";

字符数组整体赋值问题

chara[10]; strcpy(a, "hello");//这种写法正确,也是推荐使用的方式

charstr1[10], str2[10];

str1 == str2

数组与字符串在机器中的存储

*p = ‘z’;想改变字符串的值是不被允许的。

+—+—+—+—+—+—+

b:|h|e | l | l | o|\0|

+—+—+—+—+—+—+

+—–++—+—+—+—+—+—+

a:|*======>|w|o|r|l|d|\0|

+—–++—+—+—+—+—+—+

的指针;b为保存字符串的数组

(b[3] = ‘f’;)(a[3] = ‘a’;

return a;

sizeof(s1); //return 4, pointer size

sizeof(s2); //return 6, array size

数组名首地址和取数组首地址区别

数组名表示数组的入口地址,这一点与函数名,结构体标识等类似。

估计不少人这个时候糊涂了,这两个有区别吗?数值不一样么?

它们两个的数值是一样的,因为地址只有一个,数组的一个元素的地址的值就是这个数组的地址的值,,那么为什么还要分这么细致呢?下面举个例子

char a[10];char *p = NULL; char (*p_a)[10] = NULL; p = a; p_a = &a;未提前分配内存的情况

1)请问以下代码有什么问题:int main(){ char a;char *str=&a;strcpy(str,"hello");printf(str); return 0;} 答案:没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃2)char *s; strcpy(s,"hello");是不正确的为什么不对?如果s没有分配内存空间strcpy(s, "hello")就会导致内存访问的异常可以用 s = (char*)malloc(10);//分配10字节的内存给s 或 s = new char[10];//紧限于C++语言3)请问如下语句有问题吗?char *a;string b=a;解析:因为没有提前为a指定内存地址,所有会发生未知的异常;但若指定了内存位置或初始化数值,则没有任何问题。

酒般的思念,一饮就醉,醉时就用全部的热情读这忧伤的月色,

char *与char []深度刨析

相关文章:

你感兴趣的文章:

标签云: