c语言 数组指针传递给函数_c语言-数组、指针面试题

本文详细介绍了C语言中数组、指针在函数传递时的注意事项,包括sizeof运算符的使用、strlen函数的区别、字符串与数组长度的计算、以及数组作为函数参数和指针传递的原理。特别讨论了二维数组、字符数组和指针变量的内存分配和地址行为,强调了值传递与指针传递的区别,并通过实例解析了常见错误及其修正方法。
摘要由CSDN通过智能技术生成

6209259b0a4526608d9b59bda5cb7925.png

1、计算以下sizeof的值。

char str1[] = {
    'a', 'b', 'c', 'd', 'e'};
char str2[] = "abcde";
char *ptr = "abcde";
char book[][80]={
    "计算机应用基础","C语言","C++程序设计","数据结构"};

sizeof(str1)=?

sizeof(str2)=?

sizeof(ptr)=?

sizeof(book)=?

sizeof(book[0])=?

分析:

sizeof(str1)=5,就是5*sizeof(char)=5;

sizeof(str2)=6,字符串都是以'0'结尾,所以所占字节数为6;

sizeof(ptr)=4,ptr是一个指针,在32位平台上大小为4字节;

sizeof(book)=320,book是一个二维数组,4*80*1

sizeof(book[0])=80,book[0]是第一维数组,因为此80*1

根据sizeof求数组元素的个数也很简单,拿第一个来说,就是sizeof(str1)/sizeof(char)。

2、上面是求计算他们所占字节数,下面来看看怎么求字符串或数组的实际长度。计算下面strlen值。

char  arryA[] = {
    'a','b','c','0','d','e'};
char  arryB[] = {
    'a','b','c','d','e'};
char  arryC[6] = {
    'a','b','c','d','e'};
char *str = "abcde";

分析:

strlen(arryA) = 3,strlen遇到'0'就会返回,无论后面有多少个字符;

strlen(arryB)长度无法确定,没有人为写入‘0’,strlen会继续计算直到找到结束符,结果未知;

strlen(arryC)=5,指定了数组大小,编译器会自动在空余地方添加'0',这其实跟char arryC[6] = {'a','b','c','d','e','0'};等价。

strlen(str) = 5,不包括结尾的'0'。

由以上两个我们来看看strlen和sizeof的区别:

(1)、sizeof是C语言中的一个单目运算操作符,类似++、--等;

    用于数据类型,sizeof(type),比如sizeof(int)

    用于变量,sizeof(var_name)

    注意:sizeof不能用于函数类型、不完全类型或位字段。不完全类型是指具有未知存储大小的数据类型,比如未知存储大小的数组类型、

       未知内容的结构体或联合类型,void类型等。例如: sizeof(max),若此时变量max定义为int max(); sizeof(char_v),此时char_v

       定义为char char_v[MAX]且MAX未知。

(2)、strlen是个函数,其原型为unsigned int strlen(char *s);

     streln的计算必须依赖字符序列中的'0',通过该字符来判断字符序列是否结束。

3、忽悠人的char st

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值