高质量C,C++编程指南 知识点小结(一)

1、return语句不可返回指向“栈内存”的“指针”或“引用”,因为该内存在函数体结束时呗自动销毁
2、布尔类型、整型、浮点型判断真伪的if语句不一样
3、线性表的相关操作:
(1)创建
(2)销毁
(3)得到长度
(4)从线性表删除一个元素
(5)从线性表添加一个元素
(6)在线性表的特定位置添加元素
4、断言assert是仅在Debug版本起作用的宏,它用于检查“不应该”发生的情况,在运行过程中,如果assert的参数为假,那么程序就会中止
5、void *memcpy(void *pvTo, const void *pvFrom, size_t size) 

  assert((pvTo != NULL) && (pvFrom != NULL)); // 使用断言
  byte *pbTo = (byte *) pvTo;   // 防止改变pvTo的地址
  byte *pbFrom = (byte *) pvFrom;  // 防止改变pvFrom的地址
  while(size -- > 0 ) 
   *pbTo ++ = *pbFrom ++ ; 
return pvTo; 
}
6、以下程序中,n是m的一个引用(reference),m是被引用物(referent)。
int m; 
int &n = m; 
n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己
7、如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。
如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。
8、数组
   char a[] = "hello"; 
   char b[10]; 
   strcpy(b, a); // 不能用 b = a; 
   if(strcmp(b, a) == 0)  // 不能用if (b == a) 
9、指针
   int len = strlen(a); 
   char *p = (char *)malloc(sizeof(char)*(len+1)); 
   strcpy(p,a); // 不要用p = a; 
   if(strcmp(p, a) == 0)  // 不要用if (p == a)
10、sizeof(p)得到的是一个指针变量的字节数,相当于sizeof(char*),而不是p所指的内存容量。
    char a[] = "hello world"; 
    char *p = a; 
    cout<< sizeof(a) << endl;  // 12字节
    cout<< sizeof(p) << endl;  // 4字节
11、注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
    void Func(char a[100]) 
   { 
    cout<< sizeof(a) << endl;  // 4字节而不是100字节
   } sizeof(a)始终等于sizeof(char *)
12、如果函数的参数是一个指针,不要指望用该指针去申请动态内存;指针可以用作输出参数
void GetMemory(char *p, int num) 

 p = (char *)malloc(sizeof(char) * num); 

void Test(void) 

 char *str = NULL; 
 GetMemory(str, 100);  // str 仍然为NULL 
strcpy(str, "hello"); // 运行错误

13、如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”
void GetMemory2(char **p, int num) 

 *p = (char *)malloc(sizeof(char) * num); 
}
void Test2(void) 

 char *str = NULL; 
GetMemory2(&str, 100); // 注意参数是&str,而不是str 
strcpy(str, "hello"); 
 cout<< str << endl; 
free(str); 
发布了14 篇原创文章 · 获赞 4 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览