结构体数组名与指针区别 指向结构体数组的指针

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、数组名可作为指针常量

in t intArray[10];
intArray++;//编译器会报错此条。数组名不能作为指针变量一样累加。数组名是指针常量。

3、数组名可能失去其数据结构内涵

数组名因为可以作为指针常量,所以可以作为实参进行传递指针,但是当传递进函数的时候,作为函数的形参,其自动换成了指针。数组名作为指针常量,可以作实参,传递到函数的形参中,自动转换成指针变量。

void arrayTest(char str[])
{
 cout <<sizeof(str) << endl;//长度为4
}
int main(int argc, char*argv[])
{
 char str1[10] = "I LoveU";
 arrayTest(str1);
结构体数组名与指针区别 指向结构体数组的指针
  return 0;
}

  (1)数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;

  (2)很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

  所以,数据名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺,成了一个地地道道的只拥有4个字节的平民。

结构体和指针

数组定义好了数组的类型。例如int a[10];

而结构体的类型是结构体本身,

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/273302.html

更多阅读

基金认购与申购区别 基金赎回是什么意思

基金认购与申购区别——简介基金认购与申购,基金认购,基金申请,提供基金认购与申购的知识和二者之间的区别。基金认购与申购区别——方法/步骤基金认购与申购区别 1、基金认购是指投资者在开放式基金募集期间、基金尚未成立时购买

拉拉裤与纸尿裤区别 纸尿裤和拉拉裤哪个好

拉拉裤与纸尿裤区别——简介提到纸尿裤相信每一个妈妈都会了解其作用,但有些妈妈对拉拉裤的了解却并不深,尤其是新妈妈,因为他们的宝宝还处在婴儿期,对于拉拉裤的使用还很少,甚至不需要,所以他们并不知道拉拉裤和纸尿裤的区别,今天我就跟大

C#的动态数组 c 动态数组的用法

在使用数组的过程中,有时候希望数组的长度和元素个数能随程序的运行不断改变,但改变一次就要重新开辟一个新的数组对象,这样将占用内存空间。为了解决这个问题,Microsoft.NET Framework 体统了一个ArrayList类,专门用于处理可按动态增减

声明:《结构体数组名与指针区别 指向结构体数组的指针》为网友难承情长分享!如侵犯到您的合法权益请联系我们删除