v1A*_*xvw 3 c arrays malloc free boolean
我创建了一个实际上代表一个存储在char中的8个布尔数组的对象.我用它来学习更多关于按位运算符以及在C中创建自己的对象的内容.所以我有两个问题:
代码:
/*
* IEFBooleanArray.h
* IEFBooleanArray
*
* Created by ief2 on 8/08/10.
* Copyright 2010 ief2. All rights reserved.
*
*/
#ifndef IEFBOOLEANARRAY_H
#define IEFBOOLEANARRAY_H
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef char * IEFBooleanArrayRef;
void IEFBooleanArrayCreate(IEFBooleanArrayRef *ref);
void IEFBooleanArrayRelease(IEFBooleanArrayRef ref);
int IEFBooleanArraySetBitAtIndex(IEFBooleanArrayRef ref,
unsigned index,
int flag);
int IEFBooleanArrayGetBitAtIndex(IEFBooleanArrayRef ref,
unsigned index);
#endif
Run Code Online (Sandbox Code Playgroud)
/*
* IEFBooleanArray.c
* IEFBooleanArray
*
* Created by ief2 on 8/08/10.
* Copyright 2010 ief2. All rights reserved.
*
*/
#include "IEFBooleanArray.h"
void IEFBooleanArrayCreate(IEFBooleanArrayRef *ref) {
IEFBooleanArrayRef newReference;
newReference = malloc(sizeof(char));
memset(newReference, 0, sizeof(char));
*ref = newReference;
}
void IEFBooleanArrayRelease(IEFBooleanArrayRef ref) {
free(ref);
}
int IEFBooleanArraySetBitAtIndex(IEFBooleanArrayRef ref, unsigned index, int flag) {
int orignalStatus;
if(index < 0 || index > 7)
return -1;
if(flag == 0)
flag = 0;
else
flag = 1;
orignalStatus = IEFBooleanArrayGetBitAtIndex(ref, index);
if(orignalStatus == 0 && flag == 1)
*ref = *ref + (int)pow(2, index);
else if(orignalStatus == 1 && flag == 0)
*ref = *ref - (int)pow(2, index);
return 0;
}
int IEFBooleanArrayGetBitAtIndex(IEFBooleanArrayRef ref, unsigned index) {
int result;
int value;
value = (int)pow(2, index);
result = value & *ref;
if(result == 0)
return 0;
else
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我更像是一个Objective-C家伙,但我真的想更多地学习C语言.任何人都可以要求更多的"功课",我可以提高自己吗?
谢谢,ief2
Car*_*rum 10
< 0,它没有意义,并在某些编译器上引起警告.unsigned int,请不要使用无符号类型unsigned char.flag == 0你为什么要设置它0?*在a中抽象出来typedef,但无论如何都没有错.memset()即可将单个字节设置为0.pow计算位偏移是疯了.查看<<和>>运算符,然后使用它们if陈述条件,或为将来调试痛苦做好准备.&而|不是算术,+并且-在SetBitAtIndex函数中,您if无论如何都不需要所有这些复杂的语句.GetBitAtIndex例程不受限制index.从这个列表中,#9是唯一一个意味着你的程序在所有情况下都无法工作的人,我想.我没有详尽地测试它 - 这只是第一眼检查.
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |