11月24号-11月30号

汇总一下这周了解的东西,以后看看应该会别有感触。

一,C语言方面

1,关于可变参数的三个宏va_start(),va_arg() 和va_end()

typedef char * va_list;

#define _INTSIZEOF(n)  ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))

#define va_start(ap,v) (ap = (va_list)&v + _INTSIZEOF(v)) //va_list ap;

#define va_arg(ap,t) (*(t *)(ap += _INTSIZEFOF(t)) - _INTSIZEO(t)

#define va_end(ap) (ap = (va_list)0)

虽软函数参数可变,但至少有一个参数是给定的,要想通过va_start(ap,v)让ap指向第一个可变参数,v必须是最后一个不变的参数。

_INTSIZEOF(n)这样定义是为了字节对齐,以这种方式定义,_INTSIZEOF(n)的值一定是 sizeof(int)的倍数。va_arg(ap,t)中 t 表示当前ap指向的可变参数的类型,ap+=_INTSIZEOF(t),ap的值已经改变,指向下一个可变参数,所以va_arg(ap,t)的作用是取出当前ap指向的可变参数的值,且将ap指向下一个可变参数。

用法如下:

#include<stdarg.h>

void example(int a,...)
{
va_list ap;
char *s = NULL;

va_start(ap,a);
s = va_arg(ap,char *);  //这里设的该函数就两个参数,第二个参数是 char * 类型的
va_end(ap);

printf("%s\n",s);
}

上面所说的va_start(ap,v)有两个参数,头文件为stdarg.h,还有一种形式如下:

va_start(va_list ap)只有一个参数,头文件是varargs.h


2,vsprintf()函数

int vsprintf(char *dest,char *format,va_list ap)

作用:将ap指向的内容以 format  里面字符串的形式保存到 dest中,正常的话返回生成字符串的长度(\0除外),出错就返回负值。


3,数字名的sizeof()值

例1:int a[3];

sizeof(a) = 3*sizeof(int);

例2:void exm(int a[3])

{

printf("%d\n",sizeof(a));   // 此处的sizeof(a)=4,把a看作指针类型。

}


4,float 在内存中的表示

转载了一篇文章,讲的很详细


5,字节对齐的意义

以空间换时间:CPU读取指令的时候往往是一次读取4字节的倍数个数据,假设一串数据abcdefgh其中 bcde为一组,CPU读取时先读abcd,再读efgh,这样还要将 bcde重新组合,如果数据为a__bcdefgh,这样就能一次读取bcde,提高了效率。网上的解释是这样。还有一种说法是字节对齐在不同设备间通信的时候很有用处。


二, oracle部分

1,根据已经创建过的表 t1 创建一个新表 t2,t1 中有数据

create table t2 as select * from t1 where 1=2;


2 ,pro*c编程的通信区问题

SQLCA是oracle定义的两个通信区之一,是一个结构体,sqlcode是它的一个成员,用来记录最近的一条sql语句的执行情况,如果sql语句未找到相关信息,sqlca.sqlcode=1403

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值