关于C语言中指针的用法

#include<stdio.h>#include<string.h>main(){chara[]={hellow},b[]={myself!},c;c=strcat(a... #include<stdio.h>
#include<string.h>
main()
{
char a[]={hellow},b[]={ myself!},c;
c=strcat(a,b);
printf("%s",c);
}
我就想问一下为什么定义一个变量c不能被赋值于strcat(a,b),但是若定义一个指针char *c的话就可以用*c=strcat(a,b),所以我很好奇指针的用处,然而我们指针只上了*c=&a取地址,别的就没有再讲了。还有再弱弱的问一句取地址究竟表示什么意思啊?谢谢各位了
不是c,是c[40]
展开
 我来答
ERROR_CODE_7
2014-01-05 · TA获得超过262个赞
知道小有建树答主
回答量:121
采纳率:0%
帮助的人:74.7万
展开全部
char c;字符 ,字符在内存的长度1byte,8bit
char *c;指针变量,内存中长度4byte,32bit
char a[]={hello},这个数组保存的是字符串,a其实记录的是这段字符串的首地址,也可以写成char *a=“hello”。而字符串hello在内存中是有hello这五个字符+‘\0’ 所以共6个字符串组成,'\0'表示结束,\是转义,字符‘\0’就是数学上的0,strlen就是通过这0算出长度,如果,字符为 "qwer\0qwr",字符串就会被截断。
初始化数组为0,还可以这样int a[10]={0};或者int a[10]={'\0'};
给你讲个东西,32位系统为什么叫32位,因为这系统一半只能4G(不算pae内核),即2的32次方bit。4byte却刚好表示的完整个内存空间,也许是个巧合。
strcat,你最好是百度一下,并不难,完全可以自己实现的。其实就是把前面字符的0去除并把后面字符copy在0位置及其后面的内存空间,返回a字符串的地址,so,这就要求a的内存长度必须要装的下后面的字符串,不然就会出错,这是c语言的一个坑,也就是大家说的“不安全”。
更多追问追答
追问
假设我定义为char c[13] 或者char c[40]是不是也没有办法存strcat
按照你说的内存长度,是不是就像float的数不能存在int的变量一样吧?
ccccyuyan
2014-01-05 · TA获得超过217个赞
知道答主
回答量:201
采纳率:0%
帮助的人:55.8万
展开全部
strcat 返回的是一个指针 很明显你不能把一个指针赋值给一个数组名

你应该赋值给一个指针 用这个指针指向返回的地址
而你不能让数组名指向别的地方 他分配的内存是固定的 数组名不是指针!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式