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
更多>>
编程语言的类型推断怎么解决协变和逆变的问题?
一、编程语言的类型推断解决协变和逆变问题的方法类型推断并不能直接解决协变和逆变的问题,但是一些编程语言提供了额外的语法和类型系统特性来...详情>>
2023-10-15 21:40:42
JAVA的io流和nio有什么区别?
一、JAVA的io流和nio的区别1. 面向流与面向缓冲Java NIO和IO之间名列前茅个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意...详情>>
2023-10-15 12:04:02
什么是 MySQL?
一、什么是 MySQLMySQL 是应用最广泛的开源关系数据库,是许多常见网站、应用程序和商业产品使用的主要关系数据存储。MySQL 有 20 多年的社区开...详情>>
2023-10-15 06:10:40
容器化有哪些优势?
一、容器化的优势由于以下优势,开发人员使用容器化来构建和部署现代应用程序。1、便携性软件开发人员使用容器化在多个环境中部署应用程序,而...详情>>
2023-10-15 03:28:53热门推荐
Go语言的结构体中怎么设置null值?
沸Java纯粹的面向对象到底是什么意思?
热C#的方法名或者属性名首字母不大写会有什么影响?
热Java 中的双亲委派的“双”怎么理解?
新编译器怎么处理定义但未使用的函数?
编程语言的类型推断怎么解决协变和逆变的问题?
二进制代码、编程语言、软件,这三者之间的联系和区别?
C语言的structure和类有什么区别?
char*t和char t[10]的区别?
函数直接返回和传递引用的区别和取舍?
大数据与区块链有什么区别?
数据的批处理和流处理有什么区别?
公共数据和政务数据有什么区别?
ejb和spring的区别?
技术干货






