小学学校网站建设情况,html php网站开发,网站开发找工作,flash个人网站动画之前在给函数传形参时#xff0c;char*和char[]我是混着用的#xff0c;当时感觉它俩用起来没啥差别#xff0c;就草率地把它俩混为一谈。 但实际上#xff0c;这俩本质是不同的#xff0c;只是在作为形参的时候可以互换使用。我这篇博客就是来记录下它俩的区别。 现在我定… 之前在给函数传形参时char*和char[]我是混着用的当时感觉它俩用起来没啥差别就草率地把它俩混为一谈。 但实际上这俩本质是不同的只是在作为形参的时候可以互换使用。我这篇博客就是来记录下它俩的区别。 现在我定义出指针p和字符数组arr
int main()
{char* p abc;char arr[] 111;return 0;
} p和arr的不同
p和arr有着本质的不同。
p是变量用于存放地址的开在栈区。变量的值是可以改变的我们通过改变p中的地址来改变指针的指向。
arr是常量是数组首元素的地址存放在静态区。常量是无法改变的 abc和111的不同
这俩字符串本质也是不同的。
abc是常量字符串是无法修改的。其实我们这样写char* p abc;在很多编译器下会报错因为abc是const char*类型的常量字符串当前的写法存在类型不匹配的问题正确的写法应该是const char * p abc;。
111是变量是栈区中的一块数组空间111是被写进这个空间里的。此空间可读可写。 为什么abc和111在本质上会有这么大差别呢答案是天生如此。也就是说char*与char[]在初始化的时候就是完全不同的。 char* p abc;的初始化 1.在静态区上申请一块空间存放字符串常量abc 2.在栈区上为指针变量p开空间。 3.把abc的地址存进p里。OK现在p就是指向常量了当然p本身是可以改变指向的。 char arr[] 111;的初始化 1.在栈区上为数组变量开空间 2.将常量”111“的内容拷贝到数组变量里去 3.因为数组是连续存储的空间要想找到它就只需知道首元素的地址。把首元素的地址赋给常量arr。