字符数组与指针_指针数组

字符数组与指针_指针数组指针数组 char * 和 char []到底有什么不一样?我在执行strtok 的时候,如果待搜索的字符串用*注册,就会报错,以我见解,用*用来赋值还行,不能用来定义,[]才可以分配空间出来…char* 归根结底是个指针,内存得事先分

指针数组 char * 和 char []到底有什么不一样?   我在执行strtok 的时候,如果待搜索的字符串用*注册,就会报错,以我见解,用*用来赋值还行,不能用来定义,[]才可以分配空间出来…   char* 归根结底是个指针,内存得事先分配好,才能用char * 来指,你琢磨琢磨。   char[] 是数组类型, char* 是指针类型。两者根本上是不同的东西。要说不同点不如说相同点。   char[] 能隐式转换成 char* ,从而能传递给接收 char* 或 const char* 的函数。   另外就是 const char* 和 char[] 都可以用字符串字面量初始化。区别是初始化前者时字符串字面量需要是个独立对象,而指针指向其首字符;初始化后者时字符串字面量的值能直接成为字符数组的值。   ( C 允许 char* 指向字符串字面量。不要这么写。)   数组不是指针,指针也不是数组,这是两个不同的东西,只是在某些场合下,可以进行相似的操作。   a和p在内存分别是这样的(手一抖,多了个w)
字符数组与指针_指针数组
字符数组与指针_指针数组   可以看出,p是一个指针,其内容指向一个数组;a就是数组本身;   再看操作上的不同   1、对于sizeof操作符来说,char *p结果是指针大小,我的机器是8,char p[10]结果是数组大小,是10。   2、对&(取地址)操作符而言,得到的结果不一样,a = &a = &a[0],这三个数值都一样,但是类型不一样,&a是数组指针char (*)[10],&a[0]是指向第一个素的指针,是char *; p != &p,p最为一个变量,本身需要内存存放,这个地址是p本身,&pp本身的地址,类型是char ,p存放的值为指向的数组首址,所以p != &p   void func(char (*p)[10]);   func(&p); // error   func(&a); // ok   3、编译器对两者的处理不同,即访问a和p(不是内容),产生的汇编不同,具体后补   为什么会说指针和数组一样呢,这是因为在指针代数运算、数组下标运算和数组作为参数传递给函数的时候,数组会退化生成指向第一个素的指针。p[2] => *(p + 2), a[2] => *(a + 2),在这里看起来是等价的,而且还有诡异的写法3[p], 4[a]都是合法表达式,因为都会被转换成指针运算。   我就不写什么具体回答了,写几个例子,让以为指针=数组的同学琢磨一下。   1.   2.   3.   https://zhuanlan.zhihu.com/p/   这篇文章对你应该有帮助

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/41969.html

(0)
上一篇 2024年 9月 6日 下午11:39
下一篇 2024年 9月 6日

相关推荐

关注微信