数组应用

一、数组初始化

1.1 格式

共两种格式:

char buf[32] = {0};  
int buf[32] = {0};

适用于所有类型。

char buf[32] = "";

仅适用于char,相当于定义一个‘\0’的空串。

1.2 初始化为0

数组初始化为0的方法有如下三种:

  1. 全局变量和静态变量初始化时会自动被设置为0。
#include <stdio.h>
#include <string.h>

//char cbuf[32];   // 全局变量
int main(int argc, char *argv[])
{
    int ret = 0, i = 0, j = 0;

    while(1){
        char buf[32] = {0};
        ret = scanf("%s", buf);
        printf("input bytes [%d]:%s\n", ret, buf);

        for(;j++<10;);
        printf("j=%d\n", j); 

        static char cbuf[32];  // 静态变量
        printf("\ninit buf==========\n");
        for(i = 0; i < sizeof(cbuf); ){
            printf("0x%x\t", cbuf[i]);
            if((++i)%5 == 0){printf("\n");}
        }   
        printf("\n");
    }   

    return 0;
}
  1. 对于局部数组我们还有简写的初始化语法。如果一个数组被部分初始化,没有被初始化的元素会被自动设置为相应类型的0。这是编译器自动完成的。

如格式中提到的都是部分初始化:

char buf[32] = {0};  
int buf[32] = {0};
char buf[32] = "";

注:部分初始化不一定都要初始化为0,但没有被初始化的元素自动设置为相应类型的0。

  1. 程序初始化,包括for(;;)或memset()等。

参考:

  1. 如何将数组初始化为全0?

  2. 关于数组、结构体的初始化{0}

二、二维数组和双重指针不等价

int p与int p[10][10]不等价,p并不是一个二维数组的指针,只不过是一个指向指针的指针。

两者内存分布不一样。

问题:cannot convert from 'double [10][10]' to 'double ** '

例如:double arry[5][10] = {0}; double** pp; pp=arry;

直接的赋值会提示错误:cannot convert from 'double [10][10]' to 'double ** '

参数传递

将二维数组作为二重指针传递时,只是将数组的头指针传递给了函数,函数不清楚指针的内部结构。

二维数组中的a[i][j]和双重指针中的a[i][j]的意思是不一样的。

二维数组中int a[10][10]中,a[i][j]指的是第i行第j列数元素。

双重指针中int a中, a[i][j]指的是第i个存放int 指针所指向地址中的第j个元素。也就是(*(a+i)+j)。

参考:C++笔记-数组指针/二维数组转换指针

原文链接: https://www.cnblogs.com/embedded-linux/p/9027946.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/273834

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午11:54
下一篇 2023年2月14日 下午11:55

相关推荐