C语言知识小结(五)

来源:互联网 发布:中美洲际高铁 知乎 编辑:程序博客网 时间:2024/06/15 23:59

                                     二维数组



二维数组的定义

                   类型 + 数组名 + [常量表达式][常量表达式]

例如:


                   int a[2][3]    float b[3][4]



二维数组的引用

                   数组名 [下标][下标]

例如:


                   a[4][3]



二维数组的初始化

(1)分行给二维数组赋初值(定义的时候赋值)
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

(2)将所有的数组放在一个括号内
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

(3)对部分元素赋值

int a[3][3] = {{1},{5},{9}};

是对每一行的第一列元素赋值,未赋值的元素取0值,赋值后各元素的值为:

    1  0  0
    5  0  0
    9  0  0

4)如果对全部的元素赋值,则定义时候对第一维的长度可以不指定,而第二维的长度不能够省。

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
等价于:
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};


二维数组名及地址

     数组名是第一个元素的首地址

    第一维数组相当于第二维的数组名

    a + i:        第i+1个一维数组的地址
    *(a + i):    第i+1个一维数组首元素的地址
    *(a+i)+j:    第i+1个一维数组的第j+1个元素的地址
    



                           二重指针


二重指针一般用的场合:

(1)二重指针指向一重指针的地址。

#include<stdio.h>int main(){int a = 10;int *P1;int **P2;P1 = &a;P2 = &P1;return 0;}



(2)二重指针指向指针数组的地址。

#include<stdio.h>int main(){int *a[4];int **p;p = a;}



                结构体


在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

struct 结构体名
{
    结构体所包含的变量或数组
};


结构体的初始化:


struct infor    
{
    char name[50];  
    char is_male;
    int age;
};

struct infor s1 = {“name”,’0’,3}; //完全初始化

struct infor s2 = {.age = 1};
struct infor s2 = {“name”}; //部分初始化


给结构体成员赋值

        strcpy(s1.name, "郭");

        s1.is_male = 1;

        s1.age = 17;


读取结构体成员的值


    printf("结构体元素:%d %d %s.\n", s.is_male, s.age, s.name);



相同结构体变量之间可以互相赋值


struct infor    
{
    char name[50];  
    char is_male;
    int age;
}s1,s2;

s1.age = 2 ;

s2 = s1 ;





                     字节对齐

struct str1      // 7{    int a;       // 4    char b;      // 1 + 1    short c;     // 2}s1; // 8struct str2{    char a;     // 1    char b;     // 1            // + 2      int c;      // 4}s2; // 8struct str3         // 6{    int a;    char b;    char c;            // + 2}s3;  // 8struct str4{    char a;    short b;    short c;}s4;    //6
1、 结构体变量的地址是从4字节对齐的未知开始(0、4、8、C)
2、各成员在结构体里自身要对齐;
3、成员之间不满足自身对齐,得填充(padding)
4、满足结构体自身对齐的最小倍数
5、默认是4字节对齐,最大的基本数据类型和这个默认值要相比较,取其小

原创粉丝点击