黑马程序员_c语言的复杂数据类型

一、 数组

数组使用注意:

1. 数组在声明和初始化时,具体要注意的主要是初始化的时候,如果使用变量作为数组的个数的参数,那么就不能直接在后面初始化,如下代码所示:

    int count = 3;
    int array[] = {1, 2, 3};
    int c[5];
    int a1[count];
    a1[0] = 8;
    
    int a1[count] = {1, 2, 3}; //这句是不正确的,可以使用int a1[count] 进行声明,但不能赋值


如果在代码中加入宏定义,那么上述声明的语法也是正确的,具体如下:

 #define count 3
 int a1[count]= {1, 2, 3}; //利用宏定义这样写是正确的

2.计算数组的长度的代码如下:

  int count = sizeof(array)/sizeof(int);
  // array 为数组名称 ,后面的 int 类型根据array 数组的实际类型进行更改


二、 字符串

1. 字符串输出时,只有遇到\n 才会输出:比如如下的代码

    char c1[] = "test";
    
    char c2[] = {'L','P'};
    
    printf("%s\n", &c2[1]);

c1 和 c2 在内存中的存储如下图所示,当内存给变量分配空间时,是从较大的地址开始分配的:


所以上述代码在输出是输出的结果为:Ptest 。

三、 指针

1.利用指针指向数组时,我们可以使用三种方式来访问数组,例如:

    int array[5];
    
    int  *p = array;

那么我们访问数组array中元素的方式可以为:

(1).array[i]

(2).p[i]

(3).*(p + i)  // 此处加i访问第i个元素的方式,是根据array数组的类型,不同的指针类型对应不同的指针量的改变。例如:int *p = array,那么 *(p + 1)  表示的就是数组array的首地址 +4 字节 的位置的值

2.指针指向字符串

 char *c = "test";

<span style="font-size:14px;">    char *name;
    scanf("%s", name);
    printf("%s \n", name);</span>


3.指向指针的函数

下面的例子定义了一个函数指针 指向了上面例子中的函数printfBinary(int),函数指针的调用有两种方法如下:

    void (*putBianry)(int);
    
    putBianry = printfBinary;
    
    putBianry(10);
    (*putBianry)(10);


四、 结构体和枚举

1.结构体的声明和定义结构体变量

    //结构体变量的定义和赋值
    
    struct Person p1 = {"tom", 12};
    p1.age = 13;
    
    
    struct
    {
        char *name;
        int age;
    } p2;
    
    struct Person
    {
        char *name;
        int age;
    } p3;<span style="font-size: 11px;">
</span>
struct Person *p1;
(*p1).age = 13;
p1->name = "jim";



2. 枚举的类型定义和变量定义

 

    //类型定义
    enum Week
    {
        monday,
        tuesday,
        wensday,
        thursday,
        friday,
        saturday,
        sunday
        
    };
    
    
   //变量定义
    enum week w = tuesday;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值