3.5Arrays & 3.6Multidimentional Arrays

本文深入探讨了C++中使用数组作为变量初始化时的类型转换规则,特别是当使用`auto`关键字时的差异。文章还介绍了如何通过`c_str()`成员函数解决字符串初始化问题,并强调了在使用多维数组进行循环时,所有但内层数组之外的循环变量必须为引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • int (*Parray)[10] = &arr; // Parray points to an array of ten ints
    int (&arrRef)[10] = arr; // arrRef refers to an array of ten ints
    <pre name="code" class="cpp">int *(&arry)[10] = ptrs; // arry is a reference to an array of ten pointers
    
    
  • When we use a variable to subscript an array, we normally should define thatvariable to have typesize_t

    The size_t type is defined in thecstddefheader.

  • One such implication is that when we use an array as aninitializer for a variable defined usingauto, the deduced type is apointer, not an array: 

    int ia[] = {0,1,2,3,4,5,6,7,8,9}; // ia is an array of ten ints
    auto ia2(ia); // ia2 is an int* that points to the first element in ia

    It is worth noting that this conversion does not happen when we usedecltype. The type returned bydecltype(ia)is array of ten ints:

    decltype(ia) ia3 = {0,1,2,3,4,5,6,7,8,9};
    <pre name="code" class="cpp">ia3 = p; // error: can't assign an int* to an array ia3[4] = i; // ok: assigns the value of i to an element in ia3

    
    

  • There is, however, astring member functionnamed c_str that we can often use to accomplish what we want: 

    char *str = s; // error: can't initialize a char* from a string 
    const char *str = s.c_str(); // ok

    If a program needs continuing access to the contents of the array returnedbystr(), the program must copy the array returned byc_str



  • To use a multidimensional array in a range for, the loop control variable for all but the innermost array must be references. 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值