数组名作为函数参数以及sizeof用法
来源:https://blog.csdn.net/jay_zhouxl/article/details/51745518
int f(int *p,char *a)
{
printf("p[2]=%d,*(p+2)=%d\n",p[2],*(p+2));
printf("a[2]=%c,*(a+2)=%c\n",a[2],*(a+2));
printf("sizeof(p)=%d\n",sizeof(p));
printf("sizeof(a)=%d\n",sizeof(a));
return 0;
}
int main()
{
int p[5]={0,1,2,3,4};
char a[9]={'0','1','2','3','4','1','2','3','4'};
printf("sizeof(p)=%d\n",sizeof(p));
printf("sizeof(a)=%d\n",sizeof(a));
f(p,a);
return 0;
}
输出结果为:
sizeof(p)=20 //5*4 int占四个字节
sizeof(a)=9 //char占1个字节
p[2]=2,*(p+2)=2
a[2]=2,*(p+2)=2
sizeof(p)=4 //指针占4个字节
sizeof(a)=4 //指针占4个字节
在《C陷阱和缺陷》中有两句话:
1.如果我们使用数组名作为函数参数,那么数组名会立刻转换为指向该数组第一个元素的指针。C语言会自动的降作为参数的数组声明转换为相应的指针声明。
2.除了a被用作运算符sizeof的参数这一情形,在其他所有的情形中数组名a都代表指向数组a中下标为0的元素的指针。
来源:https://blog.csdn.net/u011421608/article/details/46270221
如下代码中,把数组作为函数参数时,函数中需要计算数组大小:
void copy(int a[],int b[])
{
memcpy(b,a,sizeof(a));
}
这段代码的本意是将a中的所有字符拷贝到B中,但运行时会发现不能得到正确结果。因为当数组作为形参时,在函数内退化为指针,因此sizeof(a)返回的是指针的大小,而不是数组a的大小。正确的做法将数组的引用作为参数:
void copy(int (&a)[],int b[])
{
memcpy(b,a,sizeof(a));
}
数组名作为函数参数以及sizeof用法的更多相关文章
- C++ 数组名作为函数参数 都是我的错
]) { cout<<sizeof(arr); } 这样一道题,我以为输出的是100呢……32位系统,结果是4 因为:数组名在函数体中被当成一个指针来使用 #include <ios ...
- go语言基础之数组指针做函数参数
1.数组指针做函数参数 示例: package main //必须有个main包 import "fmt" //p指向实现数组a,它是指向数组,它是数组指针 //*p代表指针所指向 ...
- 《挑战30天C++入门极限》在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。
在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子. 以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址. #include <std ...
- JS 不定函数参数argument的用法
本篇文章只要是对js的隐含参数(arguments,callee,caller)使用方法进行了介绍. arguments arguments 该对象代表正在执行的函数和调用它的函数的参数. [func ...
- 【Python】函数参数类型及用法
一.函数的参数类型 def hs(a1,a2,a3,...): ****statements 其中a1,a2,a3是函数的参数,函数的参数类型可分为:必须参数.默认参数.可变参数(不定长参数).关键 ...
- Python技法2:函数参数的进阶用法
1.关键字参数(positional argument)和位置参数(keyword argument) Python函数的参数根据函数在调用时(注意,不是函数定义时)传参的形式分为关键字参数和位置参数 ...
- [GO]数组指针做函数参数
package main import "fmt" //p指向实现数组a,它是指向数组,它是数组指针//*p指向指针指向的内存,就是实参a func modify1(p *[]in ...
- C++数组(指针)作为函数参数
本文的学习内容参考:http://blog.csdn.net/wwdlk/article/details/6322843 1.当用数组名作为函数参数时,函数的实参和形参都应为数组名(或者指针): Ex ...
- C语言数组作为函数参数
数组可以作为函数的参数使用,进行数据传送. 数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用:另一种是把数组名作为函数的形参和实参使用. 数组元素作函数实参 数组元素就是下标变量, ...
随机推荐
- Flex tree展开节点问题!
问题: 使用 for each(var item:XML in menuTree.dataProvider) { menuTree.expandChildrenOf(item,true); ...
- HDU 5912 Fraction
题目来源:2016 CCPC 长春站 题意:青蛙先生想计算一个式子的值,输入两个数列a[],b[]求出最后的分子和分母 思路:一开始看到这个图片首先想到的是递归实现,递归部分始终计算的是右下部分 /* ...
- HDU-2955 Robberies 浮点数01背包 自变量和因变量位置互换
题目链接:https://cn.vjudge.net/problem/HDU-2955 题意 突然想找几个银行抢钱. 给出各银行的钱数和被抓的概率,以及能容忍的最大被抓概率. 问他最多能抢到多少钱? ...
- webpack中关于require与import的区别
1.require常见使用场景: var path = require('path') var utils = require('./utils') 此时webpack会将path/utils/con ...
- SQL SERVER-identity | @@identity | scope_identity
主键自增 IDENTITY(1,1),MS SQL Server 使用 IDENTITY 关键字来执行 auto-increment 任务. 在上面的实例中,IDENTITY 的开始值是 1,每条新记 ...
- 机器学习之&&Andrew Ng课程复习--- 聚类——Clustering
第十三章.聚类--Clustering ******************************************************************************** ...
- javascript 获取指定范围随机数
<script type="text/javascript"> function GetRandomNum(Min,Max){ var Range = Max - Mi ...
- JavaScript DOM(一)
文件夹: DOM家谱树 节点的基本属性和方法 document与getElement方法 DOM家谱树 DOM能够将不论什么HTML或XML文档描绘成一个由多层次节点构成的结构.当中节点被分为几种不同 ...
- Ruby学习笔记(一)
在做实验的时候,由于每次都要手工修改文件夹的名字,实在是给自己添了太多的麻烦,为了摆脱手工修改的困恼,于是产生了一个使用程序批量修改文件夹名字的好主意.为了最终实现这个目标,自然需要选择一种合适的脚本 ...
- 移动端1px细线问题
1可以用伪类实现 .con{position: relative;.con:before { content: " "; position: absolute; left: 0; ...