关于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] 展开
#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] 展开
2个回答
展开全部
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;指针变量,内存中长度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的变量一样吧?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询