C语言字符串赋值操作
C、D选项是初始化列表的形式吧,是不是初始化列表不属于赋值呢?B\C\D都是把“ABCD"的首地址赋给了一个值吧...
C、D选项是初始化列表的形式吧,是不是初始化列表不属于赋值呢?B\C\D都是把“ABCD"的首地址赋给了一个值吧
展开
展开全部
首先要弄清楚 什么是 字符串指针,还有什么叫字符数组。
字符串指针只是一个指针,就像你上面 的 A 里面的 s 没有初始化,那么你调用读串 函数 数据要写到哪里呢? 不知道吧 ,因 为s 不知道 指向哪里。
char *s; s="ABCDEF"; 这又是什么意思呢? 这个操作 是将一个 串("ABCDEF" 在内存中已经存在了),只是将这个串的首地址 赋给 s ,也就是让 s 指向 这个串。你可以把这个串理解成 在编译时期就已经确定好了的数据。我们可以用它。但不能更改他的值。
什么叫 字符数组呢? 首先要弄清楚 什么叫 数组 ,如 int array[4]={1,2,3,4}; 这是什么意思呢?
就是 四个连续的整数 吧。 同样 字符数组也 是 连续的 N个字符吧 如 char arr[3]={'A','B','C'};
这是一个数组 ,有三个元素,分别是 A B C ,看起来“好像”字符串呀,为什么是 “好像”,因为它与字符串 有着本质的区别。字符串 是 N 个连续的字符 +‘\0’ 组成, 我们上面的 例子只有 N个连续的字符,没有 ‘\0’ 吧。所以它不是字符串。 为了使用方便 呢,编译器允许我们 使用如下方式初始化一个字符串。
1:char *s="abcdef";
2:char ss[10]="abcd";
3:char sss[10]={"kkkk"};
上面三种方式 都是正确的,但是 有区别。
1: 上面已经讲了,是将已经存在于内存中的字符串的首地址 赋值给 s
2: 这是将已经存在于内存中的字符串 拷贝到ss 这个数组里面,是一个拷贝 过程,产生的影响是系统中存在两个 相同的字符串。
3:同2
字符串指针只是一个指针,就像你上面 的 A 里面的 s 没有初始化,那么你调用读串 函数 数据要写到哪里呢? 不知道吧 ,因 为s 不知道 指向哪里。
char *s; s="ABCDEF"; 这又是什么意思呢? 这个操作 是将一个 串("ABCDEF" 在内存中已经存在了),只是将这个串的首地址 赋给 s ,也就是让 s 指向 这个串。你可以把这个串理解成 在编译时期就已经确定好了的数据。我们可以用它。但不能更改他的值。
什么叫 字符数组呢? 首先要弄清楚 什么叫 数组 ,如 int array[4]={1,2,3,4}; 这是什么意思呢?
就是 四个连续的整数 吧。 同样 字符数组也 是 连续的 N个字符吧 如 char arr[3]={'A','B','C'};
这是一个数组 ,有三个元素,分别是 A B C ,看起来“好像”字符串呀,为什么是 “好像”,因为它与字符串 有着本质的区别。字符串 是 N 个连续的字符 +‘\0’ 组成, 我们上面的 例子只有 N个连续的字符,没有 ‘\0’ 吧。所以它不是字符串。 为了使用方便 呢,编译器允许我们 使用如下方式初始化一个字符串。
1:char *s="abcdef";
2:char ss[10]="abcd";
3:char sss[10]={"kkkk"};
上面三种方式 都是正确的,但是 有区别。
1: 上面已经讲了,是将已经存在于内存中的字符串的首地址 赋值给 s
2: 这是将已经存在于内存中的字符串 拷贝到ss 这个数组里面,是一个拷贝 过程,产生的影响是系统中存在两个 相同的字符串。
3:同2
展开全部
B是先申请了一个字符串指针,之后把它指向了”ABCD“的首地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串是用'\0'作为结束符的,C的话空间不够,因为加上'\0'就应该要6的空间;
D的话没有存储'\0',只能说是5个字符,不算一个字符串。
D的话没有存储'\0',只能说是5个字符,不算一个字符串。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询