C语言变量类型及指针变量

1、整形数据

在存储单元中的存储方式是:整数的补码。
系统执行到变量的定义语句时会为变量开辟存储空间。开辟的多少由数据类型决定。一个字节=8bit。
通常长整型(long int)数据的长度为4个字节,短整型(short int)的数据长度为2个字节,而int可以是2个字节或者4个字节,由编译系统决定。
整形数据表示范围

2、字符类型 char

只能使用系统的字符集中的字符,大多数系统采用ASCII字符集,包括127个字符。
C语言中,用一个字节(8位)储存一个字符。

对于 char 和 int ,可以用 signed(可正可负) 和 unsigned(正整数) 去修饰
对于 unsigned 类型修饰的数据类型,有一下两类

  • unsigned char :值的范围在0~255之间
  • unsigned short :值的范围在0~65536之间

在keil编程中,已经做出了简化。 _t 表示 type

  • uint8_t 代表 unsigned char
  • uint16_t 代表 unsigned short
  • uint32_t代表 unsigned int

3、浮点类型 float / double

C语言中,实数是以指数的形式存放在存储单元中的。由于小数点的位置可以移动,所以称为浮点数。

  • float型 为单精度浮点数类型 , 4个字节存储空间
  • double型 为双精度浮点数类型,8个字节存储空间
  • long double型 为双精度浮点数类型,8个字节或16个字节的存储空间

在这里插入图片描述

4、指针变量

4.1 定义指针变量

  • 指针变量的一般形式为:
__类型名 	*指针变量名__
  • 定义指针时必须指定变量的 基类型 ,即:为了有效的存取一个数据,除了需要知道数据的位置信息,还需要知道数据的类型信息。
    如果指针指向一个整型变量,那么指针移动一个位置,意味着地址加4个字节。

4.2 指针指向数组

  • 指针的乘除运算是没有意义的。但对数组使用指针时,指针自加或自减运算可以提高效率
p++ ;	使指针指向下一个元素
*p ;	得到下一个元素的值

++ 和 * 优先级相同,放在一起时自右向左执行。因此上式可以改写为:

*p++ ;
  • C语言中,数组名(不包括形参的数组名)代表数组中首个元素的地址:
int a[10];
int *p = &a[0];

等效于

int a[10];
int *p = a;
  • 当指针指向数组时,指针可以带下标。
    如果 指针p 指向a[0],*p[i] 等效于 a[i];
    如果 指针p 指向a[2],*p[i] 等效于 a[2+i];

  • 当指针指向数组时,C编译都是将形参数组名作为指针变量来处理的。

fun (int arr[] , int n)

等效于

fun (int *arr , int n)

4.3 指针指向函数

  • 在编译时,函数的源代码会被转换为可执行的代码并分配一段存储空间。这段空间的起始地址,就是函数的入口。调用函数时,从函数名可以得到函数的起始地址,并执行函数。
  • 定义指针变量的一般形式为:
    类型名 (* 指针变量名)(函数参数列表)
  • 定义p为指向函数的指针变量,它可以指向的函数的类型为整形,并且有两个整形的输入。
    则:指针变量的类型为:int(* )(int ,int )
int max(int x, int y)
{
	int z;
	if(x>y)		z = x;
	else		z = y;
	return z;
}

int main()
{
	int(*p)(int , int );
	
	int a = 1, b = 3 , c;
	p = max;
	
	c = (*p)(a,b); 
}


4.4 用指向函数的指针作为函数的参数

int max(int x, int y)
{
	int z;
	if(x>y)		z = x;
	else		z = y;
	return z;
}

int min(int x, int y)
{
	int z;
	if(x>y)		z = y;
	else		z = x;
	return z;
}

int add(int x, int y)
{
	int z;
	z = x + y;
	return z;
}

int fun(inrt x,int y,int(*p)(int , int))
{
	int result;
	result = (*p)(x,y);
	return result ;
}

int main()
{
	int a = 21 , b = 13;
	int m , n;
	if(n == 1)	m = fun(a,b,max);
	else if(n == 2)	m = fun(a,b,min);     
	else if(n == 3) m = fun(a,b,add);
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值