中易网

数组可以赋值给指针吗?(求高手) 例如: int num[10],*pn; pn=num;

答案:5  悬赏:50  
解决时间 2021-01-16 00:49
数组可以赋值给指针吗?(求高手) 例如: int num[10],*pn; pn=num;
最佳答案
指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。
  1.指针与数组的关系
  当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如:
  char str[20], *ptr;
  ptr=str;
  ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既可以用下标变量访问,也可以用指针访问。
  2.指向数组元素的指针
  若有如下定义:
  int a[10], *pa;
  pa=a;
  则p=&a[0]是将数组第1个元素的地址赋给了指针变量p。
  实际上,C语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得:p=&a[0]或p=a。
  这两种方法在形式上相像,其区别在于:pa是指针变量,a是数组名。值得注意的是:pa是一个可以变化的指针变量,而a是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a是不能变化的,不允许使用a++、++a或语句a+=10,而pa++、++pa、pa+=10则是正确的。由此可见,此时指针与数组融为一体。
  3.指针与一维数组
  理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储组织形式和对数组元素的访问方法。
  一维数组是一个线形表,它被存放在一片连续的内存单元中。C语言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。
  实际上编译系统将数组元素的形式a[i]转换成*(a+i),然后才进行运算。对于一般数组元素的形式:<数组名>[<下标表达式>],编译程序将其转换成:*(<数组名>+<下标表达式>),其中下标表达式为:下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:*<地址>=<地址所对应单元的地址的内容>。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。
  数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。
  4.指针与多维数组
  用指针变量可以指向一维数组,也可以指向多维数组。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。
  例如,在一个三维数组中,引用元素c[i][j][k]的地址计算最终将换成:*(*(*(c+i)+j)+k)。了解了多维数组的存储形式和访问多维数组元素的内部转换公式后,再看当一个指针变量指向多维数组及其元素的情况。
  1 指向数组元素的指针变量
  若有如下说明:
  int a[3][4];
  int *p;
  p=a;
  p是指向整型变量的指针;p=a使p指向整型二维数组a的首地址。
  *(*(p+1)+2)表示取a[1][2]的内容;*p表示取a[0][1]的内容,因为p是指向整型变量的指针;p++表示p的内容加1,即p中存放的地址增加一个整型量的字节数2,从而使p指向下一个整型量a[0][1]。
  2 指向由j个整数组成的一维数组的指针变量
  当指针变量p不是指向整型变量,而是指向一个包含j个元素的一维数组。如果p=a[0],则p++不是指向a[0][1],而是指向a[1]。这时p的增值以一维数组的长度为单位。
  5.指针与字符数组
  C语言中许多字符串操作都是由指向字符数组的指针及指针的运算来实现的。因为对于字符串来说,一般都是严格的顺序存取方式,使用指针可以打破这种存取方式,更为灵活地处理字符串。
  另外由于字符串以′\0′作为结束符,而′\0′的ASCII码是0,它正好是C语言的逻辑假值,所以可以直接用它作为判断字符串结束的条件,而不需要用字符串的长度来判断。C语言中类似的字符串处理函数都是用指针来完成,使程序运行速度更快、效率更高,而且更易于理解。
全部回答
似乎指针是指向数组的第一个位置的???
想不起来啊。。。
当然可以
这个指针指向的是数组首地址
好问题,首先pn是一个int *类型的,默认可以转换为指向int[]类型的
可以,num为指向数组第一个数值的指针,将其赋给同类型的指针pn,则pn也就指向数组首位置,可以通过*(pn+i)来选择输出数组内的数据!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
儿子的子是几画?
i5 8400可以用ddr4 2400的内存吗
颜诺女子美容养生会所地址在什么地方,我要处
柳林县薛村镇中学地址有知道的么?有点事想过
北京市海淀区上地东路1号院1号楼A901B 的英文
the sooner begun,the sooner done是什么意
为什么刀剑进不去?????????????
建高层为什么要使用商混和混凝土有什么区别
谁懂华为s2309tpei交换机价格是多少
成语英雄路第1关留一贯而行
CPU中的AMD938针和Intel775针有什么区别?
村里的新农合都交上了,我们一家还没有交该去
请专家鉴定一下这是什么玉,古人佩玉吗?
千里行客寄书亭 借问汗宫尽少情 不爱红尘真君
家里龙铁树苗叶子变黄腐烂为怎么办,请各地农
推荐资讯
韩文数字怎么写
求第70届奥斯卡颁奖典礼视频
宝马1系加几号汽油,宝马1系加多少号汽油合适
雪豹地址在什么地方,想过去办事
乐2系列手机没有耳机接口么
那个for是不是不能加具体的时间
北叟失马怎么意思
康佳乐家纺地址在什么地方,想过去办事
汉高祖刘邦死后,吕雉如何处理刘邦的八子?
魅蓝note3手机油漆掉了怎么补
请帮我推荐几本小说,最好是完结的,末日/
北京有风波庄吗,在什么地方?我在朝阳这边,
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?