C语言中 数组与指针 有时确实很难区分,有太多相似,但也有不同,致命的不同。
一 先说说相同点。
1数组可以当指针访问,即数组名可以看成指针(暂时这么说)
例如
char a[10] = "i love you";
*a = 'a';
printf("%s\n",a);
printf("%c\n",*a);
打印结果 a love you
a
可以看出数组可以当指针来访问该数组。
二数组与指针的不同点
1先看个例子
char *b;
char a[10] = "i love you";
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));
输出结果 10
4
可以看出数组名不是指针,至少不单单是指针, 因为它和指针大小不一样。
2
其实数组有以下特点(摘自别人的文章)
(1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;
(2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;
(3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为 4),仅仅意味着数组的存放地址!
数组名指代一种数据结构:数组,所以其长度为10;
数组可以作为指针常量(即不能再指向别处的指针);
如以下程序
int a[10];
a++;
编译器会报错。
三 总结类数组和指针的区别和相同点。然后还有一个特殊情况;
如下例
void mysizeof(char a[])
{
printf("%d\n",sizeof(a));
}
int main()
{
char a[10];
mysizeof(a);
return 0;
}
输出结果为4;
又成类指针, 当数组名当参数传入函数时,数组名就失去类作为数组的特权,彻底沦为指针;
注意:sizeof() 并不是函数,而是一个操作符,因为其可以这样用
sizeof(int) 没有任何函数可以接纳一个数据类型作形参。
一 先说说相同点。
1数组可以当指针访问,即数组名可以看成指针(暂时这么说)
例如
char a[10] = "i love you";
*a = 'a';
printf("%s\n",a);
printf("%c\n",*a);
打印结果 a love you
a
可以看出数组可以当指针来访问该数组。
二数组与指针的不同点
1先看个例子
char *b;
char a[10] = "i love you";
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));
输出结果 10
4
可以看出数组名不是指针,至少不单单是指针, 因为它和指针大小不一样。
2
其实数组有以下特点(摘自别人的文章)
(1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;
(2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;
(3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为 4),仅仅意味着数组的存放地址!
数组名指代一种数据结构:数组,所以其长度为10;
数组可以作为指针常量(即不能再指向别处的指针);
如以下程序
int a[10];
a++;
编译器会报错。
三 总结类数组和指针的区别和相同点。然后还有一个特殊情况;
如下例
void mysizeof(char a[])
{
printf("%d\n",sizeof(a));
}
int main()
{
char a[10];
mysizeof(a);
return 0;
}
输出结果为4;
又成类指针, 当数组名当参数传入函数时,数组名就失去类作为数组的特权,彻底沦为指针;
注意:sizeof() 并不是函数,而是一个操作符,因为其可以这样用
sizeof(int) 没有任何函数可以接纳一个数据类型作形参。
本文详细阐述了C语言中数组与指针的相似点与不同点,通过实例分析帮助读者区分二者,并揭示了一个特殊场景下数组作为函数参数时的行为变化。
1237

被折叠的 条评论
为什么被折叠?



