字符数组和字符指针变量的区别是啥呀?

只是分不分配内存空间的区别吗?

数组是一个数据结构,指针是一种类型指向变量在内存里的位置,两者原本没有什么相同点,让大家容易产生他们直接有联系的错觉是因为c/c++语言标准中,使用数组名的时候会转换为指向数组第一个元素的地址的指针。数组内储存的数据在内存中是连续的,所以下面代码中:
char str[]={'H','e','l','l','o','\0'};
char* p1=str, *p2=&(str[0]);
使用str[n]获取数组第n+1个数据的值,可以看作是这样进行的:先把str转换为首元素地址,也就是变为了获取到了指向'H'的指针,然后讲指针往后偏移n个单位,获得指向'H'往后数n个的字符。下面的p1和p2指针指向的对象也是str中的首元素(其中p1=str,而str被转化为指向首元素的指针,所以p1也指向首元素),所以使用起来的效果和str是等价的,其中方括号[],这个运算符,其实就等价于指针偏移然后解引用,例如:p[n]实际上就等价于*(p+n),可以看作是后面那个语句的语法糖,但是还要清楚,p1、p2本质就是指针,指针也是一种变量,它指向内存中的某个位置,这个位置有没有有效的数据、能不能被安全访问甚至存不存在都是不考虑的,而str就是数组,不过使用str这个关键词的时候会被默认转化为指向首地址的指针,数组被创建的会被分配到空间,所以这个空间肯定是可以被安全访问的(也有些特殊情况不会默认转化),而方括号运算符是针对指针的的一个运算符,也就是对str使用方括号获取元素的值的时候,实际上是先获取首元素地址,然后再计算目标元素的地址,最后根据地址获取到对应的数据追问

那请问这两个咋区别呀?

追答

这个string就是普通的指针,不过第二张图片里第二句的语法是错的不能加星号,第一张图片里的第二段代码在c语言语法规范下是合法的,在c++语法规范下不合法。
如果去掉第二句string前面的星号那就是在c语法下该指针指向了一个字符串常量、字符串常量和数组在内存中的储存方式(储存方式、不是储存位置)是一样的可以像数组一样使用但是不可以修改其中的值,声明后也是返回的指向首元素的指针(双引号括起来的内容也是转换指向为首元素的指针、这一点和数组有些区别),所以字符指针可以指向它然后用方括号来使用。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-02-04
数组一般指的是一个已经分配的内存块,而指针是指向这个内存块的。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网