指针与数组经典知识

※※※※※※※※※※※※※※※※※※※指针与数组※※※※※※※※※※※※※※※※※※※※※※※※※※※ 12:49 2008-1-25            BY:CHLAWS
数组在内存中的分配并不是以表格形式排列。 单个元素的存储和引用实际上是以线性形式排列在内存中的。
指针数组就是一个lliffe变量。


****************************************************************************************************
 数组和指针参数是如何被编译器修改的.
 "数组名被改写成一个指针参数"规则并不是递归定义的.数组的数组会被改写为"数组的指针",而不是"指针的指针"
****************************************************************************************************
              实     参                                所匹配的形式参数
  数组的数组          char c[8][10];                char(*)[10];             数组指针                                    

  指针数组            char *c[15];                  char **c;                指针的指针
 

 数组指针(行指针)    char (*c)[64];                char (*c)[64];           不改变                                      

 指针的指针          char **c;                     char **c;                不改变     
                                                                                                   
                                                                                                   
 正如上所述, 因此在main()中的参数才能看到 **argv这样的参数,因为*argv[]是指针数组,在编译时会被编译器改写
 成一个指向指针的指针.如果argv是一个数组的数组即(char argv[10][15])它将被编译器改写成char (*argv[15]),
 而不是 char **argv .                                                                                              

当数组名作为函数参数传递时,实际传递给函数的是一个指向数组第一个元素的指针.
函数所接受的参数实际上是原参数的一份拷贝(副本),所以函数可以对其进行操作而不会影响实际参数.
但是,对指针参数执行间接访问操作允许函数修改原先的数组的元素.    
//提炼:即对形参中指针副本的修改不会影响指针参数的本身,但对指针所指向单元的内容的修改会改变实参的内容. 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值