C语言-(void*)类型指针

(void*)类型指针:ANSI新增的:即定义了一个指针,但不指定指向任何类型(即指向抽象的数据类型)。void是空类型,只保存了指针的值,而丢失了类型信息

1 通过强制类型转换可将其值赋给另一指针变量

2.1用于动态存储函数的返回型指针 void malloc/calloc()

2.2也可用于函数 void*fun() //表示返回值是一个地址,指向空(抽象)数据类型

空指针NULL:不指向任何对象,不同于未初始化的野指针。

#ifdef __cplusplus
     #define NULL    0
#else    
     #define NULL    ((void *)0)
#endif

数组与指针:数组所占存储空间的内存:sizeof(数组名) 数组的大小: sizeof(数组名)/sizeof(数据类型)

const 和 指针

  • 指向常量的指针,值不能改变,指向可改变
  • 常指针值能改变,指向不可改变
  • 指向常量的常指针,都不能改变
#include <stdio.h>
 
int main()
{
  // 1 指向常量的指针:指向可变,值不能变可改变指针
  const int a = 10;
  int e = 20;
  int *p = &a;
  p=&e; //可指向其它对象
  //*p = 1000;//但指向&a后其值*a就不能变化
  printf("*p = %d\n", *p);
 
  // 2 可改变指针
  const b = 10;
  int *pb = &b;
  pb = p;
  printf("*pb = %d\n", *pb);
 
  // 3常指针
  const c = 10;
  int * const pc = &c;//常指针指向一个对象后指向不能变
  *pc = 1000; //但值可变(指向对象的值)
  //pc = pb;不能改变
 
  //4指向常量的常指针
  const d = 10;
  const * int const pd = &d;
  //*pd = 1000;都 不能改变
 
 
  printf("\n");
  return 0;
}
View Code

深拷贝与浅拷贝:

浅拷贝即通过指针赋值的方法实现指向,但如果浅拷贝后要删除就会使另外对象中的指针就会无效,形成所谓的野指针,而访问无效指针是危险的。

posted on 2014-07-30 11:21  杰瑞鼠  阅读(711)  评论(0编辑  收藏  举报