千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:郑州千锋IT培训  >  技术干货  >  char*t和char t[10]的区别?

char*t和char t[10]的区别?

来源:千锋教育
发布人:xqq
时间: 2023-10-19 09:02:22

一、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 相同
对* a和* p取地址得到的实际上就是数组的地址
&a和&p已经是地址了,
加上* 得到的结果对于数组名而言,是数组的地址,对指针p而言,是其指向的内容的地址

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 “<

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

职能管理与流程管理的区别是什么?

2023-10-19

端口测试用例怎么写?

2023-10-19

重大项目如何推进?

2023-10-19

最新文章NEW

为什么leetcode不支持php语言?

2023-10-19

golang的context和net.Conn怎么结合使用比较好?

2023-10-19

有什么免费的PDF翻译工具?11款免费翻译工具推荐?

2023-10-19

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>