• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

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

char*t和char t[10]的区别是:当定义 char a[10 ] 时,编译器会给数组分配十个单元,每个单元的数据类型为字符。而定义 char *t 时, 这是个指针变量,只占四个字节,32位,用来保存一个地址。

一、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)<<setw(12)用来设置右对齐的格式

cout<<“a = “<<resetiosflags(ios::right)<<setw(12)<<a<<endl;//输出结果为a在内存中的位置

cout<<“&a = “<<resetiosflags(ios::right)<<setw(11)<<&a<<endl;//对数组名取地址,结果同上

cout<<“p = “<<resetiosflags(ios::right)<<setw(12)<<p<<endl;//输出结果与a一致

cout<<“&p = “<<resetiosflags(ios::right)<<setw(11)<<&p<<endl;

 cout<<“&a[0] = “<<resetiosflags(ios::right)<<setw(7)<<&a[0]<<endl;//数组名列前茅个元素的地址
从结果可以看出,整型数组名和对数组名用取地址”&”运算符得到的结果是一致的,其结果与数组的为数不多的元素在内容在的地址相同;但对于整型指针,两者的值有所不同

cout<<“*a = “<<*a<<endl;

cout<<“*p = “<<*p<<endl;

cout<<“&(*a) = “<<&(*a)<<endl;

cout<<“&(*p) = “<<&(*p)<<endl;

cout<<“*(&a) = “<<*(&a)<<endl;

cout<<“*(&p) = “<<*(&p)<<endl;

此处* a代表的是a指向的数组的名列前茅个元素的值,* p 与* a 相同
对* a和* p取地址得到的实际上就是数组的地址
&a和&p已经是地址了,
加上* 得到的结果对于数组名而言,是数组的地址,对指针p而言,是其指向的内容的地址

void f1(int arr[])//与 f1(int *arr)在本质上一致

{

    cout<<“In f1 sizeof(arr) is: “

        <<sizeof(arr)<<endl;//这个时候,虽然传入的是数组,但是arr自动退化为指针

}

    cout<<“In main sizeof(a) is: “<<sizeof(a)<<endl;//输出12,即整个数组的大小

    cout<<“In main sizeof(p) is: “<<sizeof(p)<<endl;//输出4,即整型指针的大小

    f1(a);

    if (a== p)//用==对a和p进行比较时,两者是相同的

    {

        cout<<“a == p “<<endl;

    }

    else

        cout<<“a != p “<<endl

一站式研发项目管理平台 PingCode

一站式研发项目管理平台 PingCode

支持敏捷\瀑布、知识库、迭代计划&跟踪、需求、缺陷、测试管理,同时满足非研发团队的流程规划、项目管理和在线办公需要。

相关文章

C语言的structure和类有什么区别

百科

C++语言与C语言有什么本质的区别

百科

Angularjs中的依赖注入和Spring中的有什么区别

百科

C++的cmax和max还有cmin和min有什么区别

百科

python中+和+=的区别是什么

百科

processing还是p5.js的根本区别和各自优势是什么

百科

二进制代码、编程语言、软件,这三者之间的联系和区别

百科

My.Computer.FileSystem和System.IO.File两个命名空间有哪些具体区别

百科

Rust使用crate名和crate关键字有什么区别

百科

计算机语言和高级语言的区别是什么

百科