笔记1-10

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.  关于strlenmemset的理解

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

Memsetchar * 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,因为第一个NULLworld后的那个。这样//就会导致实际填充的范围超出预期,把a也全部填充成‘z’。应该用sizeof.

    printf("a=%s/n",a);//会输出11z

}

8.  关于creat函数

其作用是创建一个空文件creat(char *pathname,mode);

正确返回0,错误返回-1.但是这个函数不会出现引同名文件而创建失败的错误,它会覆盖原来的文件。特别警惕!

9.  strlensizeof之区别

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中的sp
sizeof(s)应为6, sizeof(p)应为一个"指针"的大小.
这个结果可以从1中对于数组类型的定义和3中数组什么时候不会"退化"中得出来.
10.3 &操作符
对于&操作符数组同样不会退化.10.1中的sp分别取地址后,其意义为:&s的类型为pointer to array of 6 chars.&p的类型为pointer to pointer to char.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值