◆ 1、指针变量的赋值、初始化与简单应用

 int x=,y;
y=; // y可以理解成该存储单元的当前名字
int *ip; // ip是一个指针(变量)
ip=&y; // ip是存储空间y的地址 cout<<*ip<<'\n'; //结果15
cout<<ip<<'\n'; //结果001BFC0C
cout<<&y<<'\n'; //结果001BFC0C
cout<<y<<'\n';; //结果15
cout<<x; //结果5
    //int age1=18, age2=20, *p_age;
// p_age=&age1;
// cout<<"age of wang ping is"<<*p_age<<endl; //18
// p_age=&age2;
// cout<<"age of zhang ling is"<<*p_age<<endl; //

◆ 2、指针变量初始化
 例如: int age , *p_age=&age; //p_age初始化为指向整型量age。
 
任何类型指针都可以赋以0值(NULL),称空指针,表示该指针不指向该类型的任何一个变量(对象)。注意不是指向地址为0的内存空间。
 
常量是不可寻址的,但常变量是可寻址的,如:
     p_age=&20; //错误
     const float PI=3.14159;
     float *pointer=&PI; //正确

◆ 3、指针使用时注意 •指针类型可以强制转换,有特殊应用,例如:
    int m, *pm=&m;
     char *p1=(char*)&m, *p2=(char*)pm;
用pm读的是整型数,用p1,p2读的是整型数的第一个字节。
•同类型的指针可以相互赋值,如有说明:
    int val1=18, val2=20, *p_val1=&val1, *p_val2=&val2;
     // p_val1指向val1,p_val2指向val2
执行 p_val1=p_val2; 后,则p_val1也指向val2,而没有指针指向val1了。(查看动画演示)
•必须谨慎使用指针,一旦使用不当会产生灾难性的后果。
 例如,局部指针变量在定义时其中的值为随机数,即指针指向了一个无意义的地址,也可能偶然指向了一个非常重要数据的地址。如果对所指的内存进行不当操作,其中的数据就丢失了。
 再如,全局指针变量,原指向一个局部变量,后来该内存又重新分配了,我们再对该指针所指地址进行操作,同样会发生不可预知的错误。
•对指针变量决不可以任意赋一个内存地址,结果甚至是灾难性的。如:
    int *P=(int *)0xaf80;
把指针变量P的初始置为0xaf80,我们并不知道那个内存单元放的是什么数据,这在一般程序中是非常危险的。
• 如果通过指向对象或结构变量的指针变量来访问其公有成员时,则只要在指针变量名后加箭头号(箭头操作符“->”),再加公有成员名就可以了。

#include "stdafx.h"
using namespace std;
#include<iostream>
#include<cstring>
using namespace std; struct student{
char name[];
char id[];//学号最好用字符串,当学号以0开头,整数会丢失0甚至认为是八进制
int age;
float score;
char address[];
};
int main(){
student st1,*prst;
prst=&st1;
cout<<"请输入学生的姓名:"<<endl;
cin.getline(st1.name,);//cin.getline可输入空格
cout<<"请输入学号、年龄和入学成绩:"<<endl;
cin>>st1.id>>st1.age>>st1.score;
cin.get();//吸收掉换行回车符
cout<<"请输入家庭住址:"<<endl;
cin.getline(st1.address,);
cout<<"姓名"<<'\t'<<prst->name<<'\n';
cout<<"学号"<<'\t'<<prst->id<<'\n';
cout<<"年龄"<<'\t'<<prst->age<<'\n';
cout<<"入学成绩"<<'\t'<<prst->score<<'\n';
cout<<"家庭住址"<<'\t'<<prst->address<<endl;
return ;
}

指针常量是固定指向一个对象的指针,即指针本身是常量:
    char ch=’a’,ch1=’x’;
     char * const ptr=&ch; //注意const放在类型说明之后,变量名之前
    *ptr=’b’;//正确
    ptr=&ch1;//错误
ptr本身在初始化时所指向的地址是不可改变的,但它指向的目标ch的值是可以改变的。
•常量指针是指向“常量”的指针,即指针本身可以改指向别的对象,但不能通过该指针修改对象。该对象可以通过其他方式修改,常用于函数的参数,以免误改了实参。类似于在“运算符重载”一节中引用参数前加const。
    char ch=’a’,ch1=’x’;
     const char * ptr1=&ch; //ptr1是常量指针
    *ptr1=’b’; //错误,只能做ch=’b’
    ptr1=&ch1; //正确

我的c++学习(9)指针的更多相关文章

  1. (转) 学习C++ -> 指针初步

    学习C++ -> 指针初步 一.指针    1. 什么是指针?        我们知道, 计算机的内存是由一个个独立的存储单元组成, 并且系统会对每一个存储单元分配一个唯一的号码, 称为这个存储 ...

  2. C++学习之指针的常见错误

    C++学习之指针的常见错误       我们在编程的过程中,有时候在使用指针的时候,删除一个指针以后一定要将这个指针设置为空指针,这是因为删除这个指针只是删除这个指针指向的地址,这个指针还真是的存在程 ...

  3. c语言学习笔记 - 指针和字符串

    前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...

  4. 【C++】初次学习C++指针时的一些易混或疑惑的地方

    C++中的指针是一个比较复杂的知识概念,最近我有在学习这一方面的知识,就借此文章记录一下在学习时容易产生的混淆.本人初次发技术类的分享,可能会有纰漏,欢迎诸位指正^_^! 1.*在两种语境下的含义 先 ...

  5. 我的c++学习(12)指针作为函数参数

    ◆ 引用调用与指针传值调用C++中函数的参数的基本使用方法是传值.为了弥补单纯传值的不足,以引用作为函数的参数,从逻辑上讲引用是别名,在函数中对参数的操作,就是对实参的操作,而在物理上是传实参的地址. ...

  6. C++学习笔记 指针与引用

    指针与引用  1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...

  7. C/C++学习笔记----指针的理解

    指针是C/C++编程中的重要概念之一,也是最容易产生困惑并导致程序出错的问题之一.利用指针编程可以表示各种数据结构,通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯:指针能 ...

  8. golang学习之指针、内存分配

    func pointer_test() { //空指针,输出为nil var p *int fmt.Printf("p: %v\n", p) //指向局部变量,变量值初始为0 va ...

  9. C学习之指针强化

    char *p = (char *)malloc(100); malloc是用于分配内存的函数,它的参数为int型,表示分配多少个字节长度,其返回类型为void*,在这里用char*就是强制转化,指定 ...

随机推荐

  1. 今天遇到sqlyog连接不上阿里云的数据库,最后百度解决了...

  2. 【原】理解javascript中的this

    最近的文章基本都是总结javascript基础内容的,因为我觉得这些东西很重要.而且很多时候你觉得你理解了,其实并没有你自认为的那么理解.十月份没怎么写文章,因为国庆出去玩的比较久,心变野了,现在是时 ...

  3. CLI:如何使用Go开发命令行

    CLI或者"command line interface"是用户在命令行下交互的程序.由于通过将程序编译到一个静态文件中来减少依赖,一次Go特别适合开发CLI程序.如果你编写过安装 ...

  4. Python学习笔记——元组

    1.创建一个元组并给它赋值 >>> aTuple = (123,'abc',4.56,['inner','tuple'],7-9j) >>> aTuple (123 ...

  5. 浅谈ARP协议以及应用

    0. 前言 本章主要简单的介绍ARP的协议格式,主机如何发送和处理ARP报文,以及免费ARP. 1. ARP协议原理 ARP,全称Address Resolution Protocol,地址解析协议, ...

  6. AngularJS 技术总结

    学习AngularJS,并且能在工作中使用到,算是很幸运了.因此本篇也会搜集各种资料,进行分享. 书籍分享 AngularJS权威指南 常用链接 AngularJS API文档 AngularJS 用 ...

  7. multiple merge document

    http://www.aspose.com/docs/display/wordsnet/How+to++produce+multiple+documents+during+mail+merge

  8. Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()

    前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...

  9. C++删除目录和复制目录函数

    BOOL DeleteFolder(LPCTSTR lpszPath) { SHFILEOPSTRUCT FileOp; ZeroMemory((void*)&FileOp,sizeof(SH ...

  10. css content 的 attr 用法 (实现悬浮提示)

    content 的attr 实现 鼠标悬浮 显示 悬浮提示, content 属性与 :before 及 :after 伪元素配合使用,来插入生成内容. 方法/步骤 1 <div> < ...