C——1

来源:互联网 发布:知乎 显微镜 编辑:程序博客网 时间:2024/06/14 10:46
2016/02/23 16:14
1.c语言不像java,并没有内存释放,所以我们在编写c语言过程中比如删除某个节点:我们通过将第二个节点的指针域赋值给第一个节点的指针域,这样达到删除第二个节点,第一个节点指向第三个节点。但是如果不释放第二个节点的内存,内存会越来越小。
     如何释放第二个节点的内存,可以先将第一个节点的指针域赋值给r,然后free(r)。
      r=p->pNext;
      p->pNext=r->pNext;
      free(r);
2.将q所指向的结点插到p所指向的结点后面。
     q->pNext = p->pNext;
     p->pNext= q;
3.#include <stdio.h>
int main(void)
{
    char array[12]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
    short *pshort = (short *)array;
    int *pint = (int *)array;
    long long  *pint64 = (long long  *)array;
    printf("0x%x,0x%x,0x%llx,0x%llx",*pshort,*(pshort+2),*pint64,*(pint+2));
    return 0;
}
这里long long相当于int64,
long long int 其实就是long long,和int在Windows平台下并不是一回事。典型的,int是32位,而long long 是64位的。
而a[n]这样的下标,n只支持机器最高效的类型。也就是说在32位环境下是int,而64位环境下才是long long。
4.大部分操作符都是可以重载的,例外的只有“.","::","?:","sizeof"。没有什么非禁止operator?:重载的理由,只不过没有必要而已。另外,expr1?expr2:expr3的重载函数无法保证expr2和expr3中只有一个被执行。而“sizeof”无法被重载是因为不少内部操作,比如指针加法都依赖于它。
简单解释一下重载:重载,简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
5.关于转义字符:所有的ASCII码都可以用“\”加数字(一般是8进制074)来表示。而C中定义了一些字母前加“\”来表示常见的那些不能显示的ASCII字符,如\o,\t,\n等。因为后面的字符都不是它本来的ASCII字符的意思了。
      (1)无论是普通字符还是转义序列,如果作为双引号中字符集合的一部分,则无需引号  
          如:printf("Hello!7/n"),打印Hello!7  
      (2)什么时候使用ASCII码,什么时候使用转义序列呢?如果要在某个转义序列和其对 应的ASCII码之间做出选择,
      则应当使用转义序列。比如选择'/f'而不是'/014'。首先,转义字符更容易记忆;其次,这样做使程序的可移植性更好。
      因为在不使用ASCII码的系统中,'/f'仍然适用  
      (3)当需要数值编码时,为什么使用'/032'而不是032?首先,'/032'更能清晰地表达程序 员表示一个字符编码的意 图       
       其次,'/032'这样的转义序列可以嵌入到C字符串中,而032不可以,例如:"Hello!/007/n"中就嵌入了'/007'  
      (4)使用ASCII时要注意数字和数字字符的区别。例如字符4的ASCII码值为52.写 法'4'表示符号4而不是数值4。
6.p1=(unsigned char *)0x801000;
   p2=(unsigned long *)0x810000;
   p1+5=p1+5*1=p1+5sizeof(unsigned char)
7.java也可以数组溢出

0 0
原创粉丝点击