数组名可以当作一个指针来用,数组名可以用*取其中的值,指针也可以用[]解引用,但它们还是有一些区别的,我知道的有3个:1.数组名不可以作为左值,关于这一点,可以将数组名理解为指针常量。 int a[10],*b; b是一个指针型变量,a是一个数组。 b是左值,可以存在b=a; a不是左值,不能出现在"="左边。 a相当于一个常量,类型为数组。2.对数组名进行sizeof运算时,结果是整个数组占用空间的大小,而sizeof(指针)得到的值 是编译器分配给指针(也就是一个地址)的内存空间。(对于比较老的编译器如TC,指针所占 字节数通常是2,对于现在常见的编译器一般是4)3.对数组名作&(取地址)运算,得到的还是数组第一个元素的地址,对指针取地址时得到的 结果是指针所在的地址,也就是指向这个指针的指针。4 运算 一维数组和指针在"*"运算是都有访存操作。 多维数组在"*"运算只是类型改变,没有具体操作。 指针变量在"*"运算时先访存,获得地址,再取地址对应内存中的值。 指针变量在"&"运算时,得到指针变量的地址。 数组在"&"运算只是类型改变,没有具体操作。 获取数组大小之方法:
#define size_of_array(x) (sizeof(x) / sizeof (x[0]))
|
5 字符串指针与字符数组之区别:
char* p1 = "Hello World"; //分配字符串常量,然后赋给 p1 char p2[20] = "Hello World"; //分配一个数组,然后初始化为字符串
|
p1可以指向别的地方,但hello world不能更改,eg:
p2不能指向别的地方,但hello world可以更改eg:
第一个字符串指针的操作等价于:
const char S[12] = "Hello World"; char* p1; p1 = &S; // p1 = S; char p2[20]; strcpy(p2, S);
|
6。只有指针可以使用增量运算符,sz**。
7。数组可以附给指针,反之则不可以。
|
|
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步