[关闭]
@ghostfn1 2016-04-03T02:00:23.000000Z 字数 1074 阅读 2636

C++ 指针使用方法

C++


Update Time:160402 Saturday

1、指针、引用和取值
在C++中,指针指的是一个存储计算机内存地址的变量。我们可以使用“引用”来表示计算机内存地址。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、short,也可以是void类型、NULL指针和未初始化指针。
通过在变量名之前使用地址操作符&我们可以直接引用变量的内存地址。一个指针可以被声明为void类型,比如void *x。一个指针可以被赋值为NULL。
  1. int *uninit;
  2. // int指针未初始化
  3. int *nullptr = NULL;
  4. // 初始化为NULL
  5. void *vptr;
  6. // void指针未初始化
  7. int val = 1;
2、指针和数组
C语言的数组表示一段连续的内存空间,用来存储多个特定类型的对象。与之相反,指针用来存储单个内存地址。数组和指针不是同一种结构因此不可以互相转换。而数组变量指向了数组的第一个元素的内存地址。
一个数组变量是一个常量。即使指针变量指向同样的地址或者一个不同的数组,也不能把指针赋值给数组变量。也不可以将一个数组变量赋值给另一个数组。然而,可以把一个数组变量赋值给指针,这一点似乎让人感到费解。把数组变量赋值给指针时,实际上是把指向数组第一个元素的地址赋给指针。
  1. int myarray[4] = {1,2,3,0};
  2. int *ptr = myarray;
  3. printf("*ptr=%d\n", *ptr);
  4. // 数组变量是常量,不能做下面的赋值
  5. // myarray = ptr
  6. // myarray = myarray2
  7. // myarray = &myarray2[0]
  8. // 数组变量实际上是第一个元素的地址,因此我们可以把这个地址赋值给指针。这与int *ptr = &myarray[0]效果相同。需要注意的是,这里指针需要和数组的元素类型保持一致,除非指针类型为void。
3、指针与结构体
就像数组一样,指向结构体的指针存储了结构体第一个元素的内存地址。与数组指针一样,结构体的指针必须声明和结构体类型保持一致,或者声明为void类型。
  1. struct person {
  2. int age;
  3. char *name;
  4. };
  5. struct person first;
  6. struct person *ptr;
  7. first.age = 21;
  8. char *fullname = "full name";
  9. first.name = fullname;
  10. ptr = &first;
  11. printf("age=%d, name=%s\n", first.age, ptr->name);

参考:
C语言指针5分钟教程 - 伯乐在线

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注