指针

原创 2012年03月24日 10:58:34

赋给指针0值时,这个0值必须是在编译时可获得的0值,例如数值0,或const常量0值,就像定义数组长度时,需要用enum常量或const常量相同。


预处理变量NULL定义在cstdlib头文件中,其值为0。在代码中使用该值,则编译时会自动被数值0替换。

对为NULL值的指针变量解引用,则会出现运行错误。

#include <iostream>
#include <cstdlib>
using namespace std;
int main(void)
{
    int *point=NULL;
    cout<<*point;
    return 0;
}

上述程序编译通过,运行出错。


指针和引用的区别:(1)不论是const引用还是非const引用,都必须进行初始化;(2)不论是const引用还是非const引用,都只能始终绑定同一个变量,不能改变。


不能使用void *指针保存const对象的地址,必须使用const void*类型的指针保存const对象的地址。

#include <iostream>
#include <cstdlib>
using namespace std;
int main(void)
{
    const int a=100;
    const int *pointa=&a;
    double b=3.2;
    double *pointb=&b;
    void *vob=&b;
    pointb=(double*)vob;
    cout<<(int)b<<endl<<*((int*)vob)<<endl<<*((int*)pointb)<<endl<<*((double *)vob);
    return 0;
}

double*转化为int*是把double指针所指的空间解释成int类型,同double转化为int不同。


指针所知的对象的值能否修改完全取决于该对象的类型,而不是指针的类型,或是指针自以为所指向的数据类型。

#include <iostream>
using namespace std;
int main(void)
{
    int b=20;
    const int *cpb=&b;
    b=30;
    cout<<*cpb<<endl;
    int *pb=&b;
    *pb=40;
    cout<<*cpb<<endl;
    const int cb=b;
    cout<<cb;
    return 0;
}

上述程序中,虽然*cpb定义为指向const对象的指针,但是实际指向的非const类型的变量,因此,即使*cpb无法改变变量b的值,但是b自己可以改变,所以程序运行结果如下:



使用typedef隐藏符合类型,要注意正确理解定义的变量,例如:

typedef string *pstring;

const pstring cstr;

此时,定义的cstr相当于string *const cstr;cstr本身是const类型的。

理解一般指针和指向指针的指针

理解一般指针和指向指针的指针 在说指向指针的指针之前,不得不说指向变量的指针。先看如下示例: 1. 指向整型指针 先看如下示例: View Code  1 #include   2 ...
  • g200407331
  • g200407331
  • 2016年09月21日 17:08
  • 7284

go指针的一个小坑

几乎可以肯定的说,go语言中除了闭包在引用外部变量的时候是传引用的,其他的时候都是传值的。如果你说形参可以定义为指针。好吧,那么告诉你这个指针的值其实是按照传值的方式使用的。 下面看个很浅显的例子:...
  • future_challenger
  • future_challenger
  • 2015年09月15日 12:05
  • 895

c语言 如何用指针来处理字符串?

一字符指针 1字符指针输出字符串 2字符指针处理字符串 3字符数组与字符指针处理字符串有何不同 二指针数组读者,你好! 如果你精通C,希望能得到你的斧正;如果你是初学者,希望能对你有所帮助。 ...
  • C2681595858
  • C2681595858
  • 2016年12月09日 20:48
  • 7469

指针数组与数组指针详解

指针数组与数组指针详解1.什么是指针数组和数组指针? 指针数组:指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系...
  • men_wen
  • men_wen
  • 2016年09月28日 21:21
  • 9637

一级指针二级指针详解

void change_val(char *p)  {      char new_val[3] = {2, 3, 4};    // [2]      p = new_val;    //[3] ...
  • tricerice
  • tricerice
  • 2015年08月08日 23:12
  • 2445

空指针、NULL指针、零指针

1. 空指针、NULL指针、零指针 1.1什么是空指针常量 0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)...
  • keep_moving_cqu
  • keep_moving_cqu
  • 2013年09月02日 14:39
  • 2067

C 二级指针和三级指针的使用

//这里给出三级指针作为参数和二级指针作为参数的demo//三级指正作为参数,内存分配在函数内//二级指针作为参数,内存分配在函数外,也就是调用的地方 #include #include #in...
  • goodxianping
  • goodxianping
  • 2016年05月29日 11:02
  • 725

c/c++中指针的理解(初学者)

关于指针,大家肯定不陌生,一些初学者,想必会出现思绪混乱的情况,现在我就来帮大家缕一缕吧。(第一次写微博 有点小紧张) 大家应该了解一些计算机对内存的管理方式吧。操作系统会将内存单元进行编号,这些...
  • Allen_ww
  • Allen_ww
  • 2016年01月11日 19:41
  • 8705

指针的定义和初始化

每个指针都有一个与之关联的数据类型,该数据类型决定了指针所有指向的对象的类型。例如,一个int 型指针只能指向 int 型对象。 1.指针变量的定义      C++语言使用 * ...
  • u012226625
  • u012226625
  • 2014年01月02日 21:19
  • 4238

C/C++指针的指针(**p)和指针的引用(*&)使用案例分析

C/C++指针的指针(**p)和指针的引用(*&)使用案例分析 一个简单的映射描述: int **pp = 5; [pp=0x***]---->[*pp=0x****]---->[**p = 5] t...
  • hzhxxx
  • hzhxxx
  • 2014年06月06日 13:15
  • 16948
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指针
举报原因:
原因补充:

(最多只允许输入30个字)