char*t和char t[10]的区别?
一、char*t和char t[10]的区别
当定义 char a[10 ] 时,编译器会给数组分配十个单元,每个单元的数据类型为字符。而定义 char *t 时, 这是个指针变量,只占四个字节,32位,用来保存一个地址。
sizeof(a) = 10 ;
sizeof(s) = ?
当然是4了,编译器分配4个字节32位的空间,这个空间中将要保存地址。
printf(“%p”,s);
这个表示 s 的单元中所保存的地址。
printf(“%p”,&s);
这个表示变量本身所在内存单元地址,不要搞混了。
用一句话来概括,就是 char *t 只是一个保存字符串首地址的指针变量, char a[ ] 是许多连续的内存单元,单元中的元素为char ,之所以用 char *能达到
char a [ ] 的效果,还是字符串的本质,地址,即给你一个字符串地址,便可以随心所欲的操所他。但是,char* 和 char a[ ] 的本质属性是不一样的。
延伸阅读:
二、整型数组和整型指针
int a[]={1,2,3};//整型数组,a的指向不能改变,但数组的内容可以改变
int *p = a;//整型指针,可以改变指向
//resetiosflags(ios::right)< cout<<“a = “< cout<<“&a = “< cout<<“p = “< cout<<“&p = “< cout<<“&a[0] = “< cout<<“*a = “<<*a< cout<<“*p = “<<*p< cout<<“&(*a) = “<<&(*a)< cout<<“&(*p) = “<<&(*p)< cout<<“*(&a) = “<<*(&a)< cout<<“*(&p) = “<<*(&p)< 此处* a代表的是a指向的数组的名列前茅个元素的值,* p 与* a 相同 void f1(int arr[])//与 f1(int *arr)在本质上一致 { cout<<“In f1 sizeof(arr) is: “ < } cout<<“In main sizeof(a) is: “< cout<<“In main sizeof(p) is: “< f1(a); if (a== p)//用==对a和p进行比较时,两者是相同的 { cout<<“a == p “< } else cout<<“a != p “<
对* a和* p取地址得到的实际上就是数组的地址
&a和&p已经是地址了,
加上* 得到的结果对于数组名而言,是数组的地址,对指针p而言,是其指向的内容的地址
相关推荐HOT
更多>>公司实时看板怎么做?
一、公司实时看板制作1、一屏包含所有需要的信息只有将所需信息整合在一个屏幕上,看板使用者才能快速获取全貌业务事实、了解业务问题。一旦数...详情>>
2023-10-19 23:03:38目前Python作为主流AI编程语言有哪些不足?
一、Python的不足1、性能问题Python是一种解释型语言,其执行速度相对较慢,尤其是在处理大规模数据时。虽然有一些针对Python的性能优化技术,...详情>>
2023-10-19 21:29:47为什么箭头函数想要立即执行必需要用括号把箭头函数整体包起来?
一、箭头函数想要立即执行必需要用括号把箭头函数整体包起来的原因箭头函数想要立即执行时必须使用括号将整个函数包起来是因为箭头函数的语法规...详情>>
2023-10-19 13:39:38为什么刷新率低会出现闪屏?
一、刷新率低会出现闪屏的原因刷新率是指显示器每秒更新屏幕的次数,通常用赫兹(Hz)来表示。如果刷新率过低,例如低于人眼的视觉感知阈值(一...详情>>
2023-10-19 12:23:48