dm03_数据类型分类和封装

数据类型的用途
//数据类型的本质:固定大小内存块的别名
// b &b 数组数据类型 (定义一个1 数组类型 2数组指针  3 数组类型和数组指针类型的关系) ====>压死初学者的三座大山  抛砖

// b+1  &b+1 结果不一样  

//b &b所代表的数据类型不一样                                     

//b 代表的数组首元素的地址                                        

//&b代表的是整个数组的地址  

 

#include "stdlib.h"
#include "stdio.h"
#include "string.h"

// 数据类型的用途
//数据类型的本质:固定大小内存块的别名
// b &b 数组数据类型 (定义一个1 数组类型 2数组指针  3 数组类型和数组指针类型的关系) ====>压死初学者的三座大山  抛砖
//

void main31()
{
	int a; //告诉c编译器分配4个字节的内存
	int b[10] ; //告诉c编译器分配40个自己内存

	printf("b:%d, b+1:%d, &b:%d, &b+1:%d \n", b, b+1, &b, &b+1);

	printf("sizeof(b):%d \n", sizeof(b));  //40
	printf("sizeof(a):%d \n ", sizeof(a)); //4
	 
	// b+1  &b+1 结果不一样  //b &b所代表的数据类型不一样
	//b 代表的数组首元素的地址
	//&b代表的是整个数组的地址  

	//
	printf("hello....\n");
	system("pause");
}

 

 

2 数据类型起别名

#include "stdlib.h"
#include "stdio.h"
#include "string.h"
//简单数据类型起别名
typedef int u32;


//复杂数据类型起别名
struct Teacher1
{
	char name[64];
	int age;

};

//将struct Teacher2重命名为Teacher2
typedef struct Teacher2
{
	char name[64];
	int age;

}Teacher2;

void main()
{
	int a;
	int b[10];
	//用数据类型定义变量天经地义
	struct Teacher1 t1;
	t1.age = 30;


	Teacher2 t2;
	t2.age = 40;

	printf("sizeof(u32):%d\n", sizeof(u32));
	printf("hello....\n");
	system("pause");
}

 

数据类型的封装

  • 1、void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
  • 2、用法1:数据类型的封装

                 int InitHardEnv(void **handle);

     典型的如内存操作函数memcpy和memset的函数原型分别为

                  void * memcpy(void *dest, const void *src, size_t len);

                  void * memset ( void * buffer, int c, size_t num ); 

  • 3、用法2:  void修饰函数返回值和参数,仅表示无。

       如果函数没有返回值,那么应该将其声明为void型

       如果函数没有参数,应该声明其参数为void

       int function(void)

       {return 1;}

  • 4、void指针的意义

      C语言规定只有相同类型的指针才可以相互赋值

      void*指针作为左值用于“接收”任意类型的指针

      void*指针作为右值赋值给其它指针时需要强制类型转换

      int *p1 = NULL;

      char *p2 = (char *)malloc(sizoeof(char)*20);

  • 5、不存在void类型的变量

      C语言没有定义void究竟是多大内存的别名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章