C和指针—const

1.unsigned int类型作为sizeof()参数引发的错误。
#include<stdio.h>
int array[] = {23,34,12,17,204,99,16};
#define TOTAL (sizeof(array)/sizeof(array[0]))
int main(){
    printf("%d\n",sizeof(array));
    printf("%d\n",sizeof(array[0]));
    int d = -1;
    if(d<TOTAL-2)
        printf("OK\n");
    return 0;
}

在上面的程序中,输出的结果是:
28
4
为什么没有和预期一样输出OK呢?
sizeof()返回的类型是无符号数。if语句在int和unsigned int之间测试相等性,d被升级为unsigned int类型,-1被转换成unsigned int的结果是一个很大的数! 导致表达式为假,故不会输出OK.
判断语句改为if(d<(int)TOTAL-2)之后,则可以按照正常逻辑输出OK.

2.int强制转换成unsigned int类型时输出

printf("%u\n",(unsigned int)d);
注意是%u而不是%d.

3.尽量不要再代码中使用无符号类型。这样可能导致在涉及混合类型时出错。
4.算术转换
#include<stdio.h>
int main(){
    char a = '5';
    int  b = 2;
    printf("%d\n",a);  //a被转换成ASCII码值
    printf("%d\n",a+b);
    return 0;
}

const相关

1. 关键字const并不能把变量变成常量。

在一个符号前面加上const限定符只是表示这个符号不能被赋值,这个符号是只读的。
const最有用之处是用它来限定函数的形参,这样该函数将不会修改实参指针所指的数据,但其他的函数却可能会修改它。
const和*的组合通常只用于在数组形式的参数中模拟传值调用。它声称:我给你一个指向它的指针,但你不能修改它。
const是一个C语言的关键字,它限定一个变量不允许被改变。
(1)const修饰的变量,其值存放在只读数据段中,起值不能被改变。称为只读变量。
(2)常量:其也存在只读数据段中,其数值也不能被改变。

2. const使用实例

const int *a; 指针所指向的对象只读,而指针是可以改变的。
int *const a; 指针是只读的。
const int a; int const a; 这两个写法是等同的,表示a是一个只读变量。
const int a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const a;
int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。
int const * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int常量或者int变量,之后就不能再指向别的地方了,它总是把它所指向的目标当作一个int常量。
const int a[5]; 是定义一个5个int大小空间常量的数组,也就是a[5]中的所有数据都是只读变量,只读。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值