1. 数据类型
char 1字节
char * 4字节
Short 2字节
Int 4字节
Un int 4 字节
Long 4字节
Un long 4字节
Float 4字节,默认小数点后6位
Double 8字节,默认小数点后6位
char p;//1字节
char a[] = "hello";//6
char *q = a;//4
char s[200];//200
int si = size(s);//4
void *f = malloc(100);//4
int *g = (int *)malloc(100);//4
2. 指针的错误写操作
Int i=10;
Int * p;
*p=i;
对一个没有初始化的指针进行赋值,是十分危险的。可能导致其他程序的崩溃,特别是linux系统下。所谓初始化是指,p=&i,指针指向一块已经被系统分配的内存。
3. main函数的两个参数
int main (int argc, char * argv[])
argc是指参数的个数,*argv[]是指参数的字符数组。
例如:./a.out hello world I love you
就是向main函数传递五个参数。
4. 在linux下输出当前时间
struct tm * ptr;
time_t lt;
lt=time(NULL);
ptr=gmtime(<);
printf(asctime(ptr));
5. 字符测试函数(ctype.h)
Isalnum(char c/int c);int c表示ASCII的值。”是否是字母或数字”
Isalpha(char c/int c); “是否是字母”
Isgraph(char c/int c); “是否可以打印”
Islower/isupper(char c/int c); “是否是小写/大写字母”
Isdigit(char c/int c); “是否是数字”
Isspace(char c/int c); “是否是空格”
Ispunct(char c/int c); “是否是标点”
6. 字符串的转换(stdlib.h)
Double atof(char * str); “把一个字符串转换为double变量”
例如:”-1234.45” -> -1234.449999
“-1234” -> -1234.000000
“1234abc” -> 1234.000000
“12abc34” -> 12.000000
Int atoi(char * str); “把一个字符串转换为整型变量”
例如:”-1234” -> -1234
“-1234.56” -> -1234
“-1234abc” -> -1234
Long atol(char *); 同上
Int lolower(char c/int c);
Int loupper(char c/int c);
7. 关于strlen与memset的理解
Strlen(char * a); 表示求a中有多少个字符,而不表示求a本身有多长的内存空间。
例如:char a[20];
Int c =strlen(a);/c的值是不可预知的,直到在内存中遇到第一个NULL
///
Char b[20]=”hello”;
Int d =strlen(b);//d的值是5,而不是20
Memset(char * s,int c,size_t n);/填充内存中n长的单位。如果n的大小超过s本身的大小,就会造成不可预知的错误。
以上两个函数联合使用,可能会造成严重的错误。
例如:
#include <stdio.h>
#include <string.h>
void main()
{
char a[]="hello world";//占十一个字节
char b[20]; // 占二十个字节
memset(b,'z',strlen(b));//strlen(b)=31,因为第一个NULL是world后的那个。这样//就会导致实际填充的范围超出预期,把a也全部填充成‘z’。应该用sizeof.
printf("a=%s/n",a);//会输出11个’z’。
}
8. 关于creat函数
其作用是创建一个空文件creat(char *pathname,mode);
正确返回0,错误返回-1.但是这个函数不会出现引同名文件而创建失败的错误,它会覆盖原来的文件。特别警惕!
9. strlen与sizeof之区别
char buf1[]=”hello world”;
char *buf2=”hello world”;
strlen(buf1);//11,只记字符个数
sizeof(buf1);//12,算最后的零,记的是内存空间的大小
strlen(buf2);//11,只记字符个数
sizeof(buf2);//4,算出的是char的内存大小
10. 数组与指针
10. 数组与指针有什么不同?
10.1 初始化的不同
char s[] = "china";
char *p = "china";
在第一句中,以&s[0]开始的连续6个字节内存分别被赋值为:
'c', 'h', 'i', 'n', 'a', '/0'
第二句中,p被初始化为程序data段的某个地址,该地址是字符串"china"的首地址
10.2 sizeof的不同
sizeof就是要求一种数据(类型)所占内存的字节数. 对于4.1中的s和p
sizeof(s)应为6, 而sizeof(p)应为一个"指针"的大小.
这个结果可以从1中对于数组类型的定义和3中数组什么时候不会"退化"中得出来.
10.3 &操作符
对于&操作符, 数组同样不会退化.10.1中的s和p分别取地址后,其意义为:&s的类型为pointer to array of 6 chars.&p的类型为pointer to pointer to char.