c语言字符指针和字符串常量问题
字符串复制函数定义strcpy(char*dst,charconst*src);问题如下:chara[]=“originalmessage”;charb[50];strc...
字符串复制函数定义strcpy(char *dst,char const * src);
问题如下:
char a[]=“original message”;
char b[50];
strcpy(b,a);
那么a和b是两个数组的指针,其类型是char *;
但是strcpy(b,“different”);
也可以进行字符串复制,那说明“different”也是char *类型吗?这是为什么呢?
请各位高手帮忙解释一下 展开
问题如下:
char a[]=“original message”;
char b[50];
strcpy(b,a);
那么a和b是两个数组的指针,其类型是char *;
但是strcpy(b,“different”);
也可以进行字符串复制,那说明“different”也是char *类型吗?这是为什么呢?
请各位高手帮忙解释一下 展开
7个回答
展开全部
"Different"是字符串(正式名称是ASCZ串,简称C串)
字符串在内存中表现为连续的字符
例如"Different"其实是'D' 'i' 'f' 'f' 'e' 'r' 'e' 'n' 't' '\0'连接在一起(每一个字母对应的ASCII码填写一个Byte,最后一字节由0填写,1Byte=sizeof(char)),在C中,这种ASCZ串会在内存中被分配地址(这一句很重要),数组的名字又可以当作第一个元素的指针
所以"Different"这个表达式应该和(&(("Different")[0]))一样(不信你自己编译下)
这样也能解释为什么字符串是字符数组,是字符指针了
PS:所有的数组都是其首元素指针,这个指针的特性是指针变量地址的值和指针的值相等,这个你可以用printf("%d"输出试试
字符串在内存中表现为连续的字符
例如"Different"其实是'D' 'i' 'f' 'f' 'e' 'r' 'e' 'n' 't' '\0'连接在一起(每一个字母对应的ASCII码填写一个Byte,最后一字节由0填写,1Byte=sizeof(char)),在C中,这种ASCZ串会在内存中被分配地址(这一句很重要),数组的名字又可以当作第一个元素的指针
所以"Different"这个表达式应该和(&(("Different")[0]))一样(不信你自己编译下)
这样也能解释为什么字符串是字符数组,是字符指针了
PS:所有的数组都是其首元素指针,这个指针的特性是指针变量地址的值和指针的值相等,这个你可以用printf("%d"输出试试
展开全部
不是的,它任然是一个字符串,看看下面几个程序以及结果吧
#include <stdio.h>
main()
{
char a[]="original message";
char b[50];
strcpy(b,a);
printf("%s",b);
}
结果是original message
#include <stdio.h>
main()
{
char *b[50];
strcpy(b,"different");
printf("%s",b);
}
程序结果是different
可见different不是char *类型
#include <stdio.h>
main()
{
char a[]="original message";
char b[50];
strcpy(b,a);
printf("%s",b);
}
结果是original message
#include <stdio.h>
main()
{
char *b[50];
strcpy(b,"different");
printf("%s",b);
}
程序结果是different
可见different不是char *类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是。这个只是把"different"这个字符串中的字符一次赋给b[]这个数组。
虽然strcpy是那么定义的,但不一定非要给他的参数是指针型的,在调用时只要给它的实参是字符型的常量就行,也就是给字符串就行。
虽然strcpy是那么定义的,但不一定非要给他的参数是指针型的,在调用时只要给它的实参是字符型的常量就行,也就是给字符串就行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
“different”表示的是一个地址,代表字符串的首地址,类似与指针,和数组名是一个概念。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
“different”看起来是字符串,其实质就是一组地址的首地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询