c语言中,易错知识点

1.结构体的计算

//struct BBB{
//	long a;
//	char c1;
//	char c2;
//	long b;
//	long c;
//}*p;//sizeof(struct BBB)=16;
//int  main()
//{
//	p = (struct BBB*)0x100000;
//	printf("0x%x", p + 0x1);//加整个结构体大小为0x10010
//	printf("  0x%x",(unsigned  long) p + 0x1);//整型加1,0x100001
//	printf("  0x%x", (unsigned long*)p + 0x1);//加sizeof(unsigned  long)*1,为0x100004
//	printf("  0x%x",(char *) p + 0x1);//加sizeof(char)*1,为0x100001
//	system("pause");
//	return 0;
//}

2.结构体中结构体,共用体中结构体的大小

//union  AAA{
//	struct {
//		char  c1;
//		short sl;
//		char  c2;
//	}half;
//	short kk;
//}number;
//struct BBB{
//	char  ucFirst;
//	short us;
//	char  c2;
//	short uo;
//}half;
//struct tagCCC
//{
//	struct
//	{
//		char   c1;
//		short sl;
//		char  c2;
//	}half;
//	long kk;
//};//结构体是个整体按4对齐6+4=10,short和long中最大所占字节为4,4的整数倍为12
//int main()
//{
//	printf("%d %d %d\n", sizeof(union AAA), sizeof(struct BBB), sizeof(struct tagCCC));
//	system("pause");
//	return 0;
//}

执行结果:

1字节对齐:4 6 8

4字节对齐:6 8 12

3.如果case语句中没有break,那么它之后的语句都会被执行。

4.指针和const的声明:

(1)指针所指对象是可读的

const  int *p;

int  const *p;

(2)指针是可读的

int  *const p;

(3)指针和指针所指对象都是可读的

const  int * const p;

int  const *constp;

5.动态开辟

void  GetMemory(char *p,int len)
{
  p=(char  *)malloc(len);
 }
 int main()
 {
   char  *p;
   GetMemory(p,10);
   strcpy(p,"bit");
   printf("%s",p);
   free(p);
  }

上述代码有三处错误!!!

a.此时调用函数p动态开辟和主函数p所指不是同一个地方,因为p只是临时拷贝,没传地址过去。

b.strcpy,出现错误,此时p无指向。

c.free时并未将其开辟(临时变量)的释放,且应在free后让指针指向空。

正确代码为:

void  GetMemory(char **p,int len)
{
  *p=(char  *)malloc(len);
 }
 int main()
 {
   char  *p;
   GetMemory(&p,10);
   strcpy(p,"bit");
   printf("%s",p);
   free(p);
   p=NULL;
  }
时间: 2024-11-24 08:14:36

c语言中,易错知识点的相关文章

Javascript易错知识点

? JS易错知识点总结: == 和 === 的区别: ==:判断两个变量的值是否相等. ===:判断两个变量的类型和值是否都相等,两个条件同时满足时,表达式为True. switch中break的作用: 如果一个case后面的语句,没有写break,那么程序会向下执行,而不会退出: 例如:当满足条件的case 2下面没有break时,case 3也会执行 1 var num = 2; 2 switch(num){ 3 case 1: 4 alert('case 1'); 5 break; 6 c

JavaScript易错知识点整理

本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES6的知识点. JavaScript知识点 1.变量作用域 var a = 1; function test() { var a = 2; console.log(a); // 2 } test(); 上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2. var a

JavaScript 易错知识点整理

本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES6的知识点. JavaScript知识点 1.变量作用域 var a = 1;function test() { var a = 2; console.log(a); // 2} test();上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2. var a =

C++易错知识点整理

目录 构造函数 析构函数 复制构造函数 组合类的构造函数 const 异常接口声明 异常处理中的构造与析构 类的派生 继承方式 虚基类 派生类的构造函数 派生类的复制构造函数 类的内联成员函数 动态创建基本类型的变量 动态创建类的对象 动态创建数组类型的对象 删除动态申请的内存 运算符重载规则 对于和--的重载 需要重载为非类成员函数的情况 指针和数组 函数指针 this指针 指向类的非静态成员的指针 指向类的非静态成员的指针 数组初始化 字符数组 结构体 联合体 结构体成员初始化 函数模板 类

JAVA常见易错知识点整理(一)

1.局部变量不能加访问修饰符2.线程中的run方法是public void run(){},重写时需要注意修饰符3.instanceof的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据.4.StringBuffer没有重写equals方法,该方法是比较两个对象是否相同,而不是比较字符串内容5.Throwable有两个子类分别是Error和Exception6.多态不能应用在泛型参数上7.抽象类可以有构造方法8.线程优先级1最小,10最大9.接口中的方法是public ab

iOS中 项目开发易错知识点总结 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [_contactTextFiled resignFirstResponder]; return YES; } - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRan

C语言中,头文件和源文件的关系(转)

简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息.(生成.exe文件) 编译器在编译时是以C文件为单位进行的,也就是

细节!重点!易错点!--面试java基础篇(一)

今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的. 2.任何静态代码块都会在main方法之前执行. 3.java程序的初始化顺序:原则:静态优先于非静态,且只初始化一次:父类优先于子类:按照成员定义顺序初始化.例顺序:父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数. 4.

常问易混淆知识点(嵌入式)

b 一.知识点1 a) 关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述).b) C语言中static关键字的具体作用有哪些 ?c) 请问下面三种变量声明有何区别?请给出具体含义int const *p;int* const p;int const* const p; a) 用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里 重新读取它的值,并不要随意针对它作优化. 建议使用volatile变量的