A、数组名不是指针。
B、数组名 是 不是指针的指针。
数组名本质:
(1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;
(2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;
(3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址!
解析:
A
char str[10];
char *pStr = str;
sizeof(str);
//值为10。对数组结构求长度。
sizeof(pStr);
//值为4。指针变量的长度。
首先对sizeof,是操作符不是函数,siziof(char)是合法的,而如果是函数,函数输入的必须是实参。
B
char str1[10] = "I Love U";
char str2[10];
strcpy(str2,str1);
函数原形中能接纳的两个参数都为char型指针,而我们在调用中传给它的却是两个数组名!
其原因是数组名可以作为指针常量使用,即指针是常量。符合指向数组结构地址的特性。
本质:
1、数组名指代一种数据结构:数组
所以数组名是指向数据结构的指针,且是指针常量,所以不能作为累加来用,不能等同于指针,例如求长度sizeof。
2、数组名可作为指针常量
int intArray[10];
intArray++;
//编译器会报错此条。数组名不能作为指针变量一样累加。数组名是指针常量。
3、数组名可能失去其数据结构内涵
数组名因为可以作为指针常量,所以可以作为实参进行传递指针,但是当传递进函数的时候,作为函数的形参,其自动换成了指针。数组名作为指针常量,可以作实参, 传递到函数的形参中,自动转换成指针变量。
void arrayTest(char str[])
{
cout << sizeof(str) << endl;
//长度为4
}
int main(int argc, char* argv[])
{
char str1[10] = "I Love U";
arrayTest(str1);
return 0;
}
(1)数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;
(2)很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。
所以,数据名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺,成了一个地地道道的只拥有4个字节的平民。
结构体和指针
数组定义好了数组的类型。例如int a[10];
【结构体 数组名与指针的区别】 而结构体的类型是结构体本身,
推荐阅读
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 【C】题目|【C语言】题集 of ⑥
- 单片机|自学单片机好找工作吗(会单片机能找什么工作?)
- 单片机|keil把源代码生成lib的方法
- c语言|一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- 个人理解|【C语言基础之类型转换】
- c语言|【C语言】自定义类型 结构体 枚举 联合
- 学习分享|【C语言函数基础】