浅析char 指针变量char *=p 这个语句的输出问题

学习指针的时候我一直有个疑惑,请看下面的代码:

#include <iostream>
using std::cout;
void main()
{
   int num=5;
   int *nPtr=&num;
   cout<<nPtr;//输出指针的地址。但是会报错<<没有直接输出int *地址的功能
   return ;

}

但是,将int 改成char 类型就不会报错,可以输出字符串。同样是指针,这次为何没有输出地址(理应输出指针代表的地址,但是<<并没有重载地址输出的功能所以报错)呢?

#include <iostream>
using std::cout;
void main()
{

   char *nPtr="Address";
   cout<<nPtr;//输出字符串Address;
   return ;

}

原来,输出流运算符<<重载了输出功能,可以自动判断类型,int直接输出,char *就输出所代表的字符串,如果要输出地址,必须使用强制类型转换函数static_cast转换成十六进制数字,其它类型的指针比如int *double *直接输出会报错

#include <iostream>
using std::cout;
void main()
{

   char *nPtr=“请问我”;
   cout<<nPtr<<"下个输出是指针地址  "<<static_cast<void *>(nPtr);//语句会报错,不能输出指针。
   return ;

}

以上这篇浅析char 指针变量char *=p 这个语句的输出问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C和指针小结(推荐)

    C和指针 相关基础知识:内存的分配(谭浩强版) 1.整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2.int *p,指向整型数据的指针变量. 3.通过指针变量访问整型变量. 4.*p :指针变量p指向的存储单元(变量) 5.p = &a-->> *p = *&a 6.用指针作函数参数 7.调用函数中,由于虚实结合是采用单向的"值传递"方式,只能从实参向形参传数据,形参值的改变无法回传给实参. 8.引用一个数组元素可以用(

  • 浅谈c/c++中使用指针需要注意的问题

    一.使用指针的时候需要注意几点: • 分配空间 • 初始化 • 释放 二.常见的错误有几种: 1)内存分配未成功,却使用了它 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功.常用解决办法是,使用内存之前检查指针是否为Null. 如果指针p是函数的参数,那么在函数的入口处用assert(p != NULL)进行检查.如果使用malloc或new来申请内存,应该用if(p == NULL)或if(p != NULL)进行放错处理. 2)内存分配虽然成功,但是尚未初始化就引用它 犯这种错误主

  • 简要说明C语言中指针函数与函数指针的区别

    指针函数一般是指返回指针的函数: #include <stdio.h> int* fun(int *a) { return a; } int main(int argc, char **argv) { int a = 3; printf("%d", *(fun(&a))); return 0; } 函数指针是表示指向函数开始地址的指针: 首先要了解函数的调用过程: #include <stdio.h> int fun(int i) { return i

  • 探寻JavaScript中this指针指向

    探寻JavaScript中this指针指向 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉),那么接下来我会深入的探讨这个问题. 为什么要学习this?如果你学过函数式编程,面向对象编程,那你肯定知

  • 直观理解C语言中指向一位数组与二维数组的指针

    一维数组和指针: 对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我

  • 浅析char 指针变量char *=p 这个语句的输出问题

    学习指针的时候我一直有个疑惑,请看下面的代码: #include <iostream> using std::cout; void main() { int num=5; int *nPtr=&num; cout<<nPtr;//输出指针的地址.但是会报错<<没有直接输出int *地址的功能 return ; } 但是,将int 改成char 类型就不会报错,可以输出字符串.同样是指针,这次为何没有输出地址(理应输出指针代表的地址,但是<<并没有重载

  • 深入解读C++中的指针变量

    指针变量是一种特殊的变量,它和以前学过的其他类型的变量的不同之处是:用它来指向另一个变量.为了表示指针变量和它所指向的变量之间的联系,在C++中用"*"符号表示指向,例如,i_pointer是一个指针变量,而*i_pointer表示i_pointer所指向的变量. 下面两个语句作用相同: i=3; *i_pointer=3; 定义指针变量 C++规定所有变量在使用前必须先定义,即指定其类型.在编译时按变量类型分配存储空间.对指针变量必须将它定义为指针类型.先看一个具体例子: int i

  • 浅谈C++中char型变量的地址输出

    在刚开始学习C/C++过程中,我们希望输出各个变量的地址来窥探一些我们"百思不得其解"的现象,例如搞清函数堆栈相关的程序内部秘密. 先看下面示例: #include<stdio.h> #include<iostream> using namespace std; class TestArrange { public: long m_lng; char m_ch1; TestArrange() { m_lng = 0; m_ch1 = 'a'; m_int = 0

  • java中int、double、char等变量的取值范围详析

    目录 1.java工具 2.代码简单框架 3.int 4.long 5.double 6.float 7.char 8.byte 9.short 10.总结 1.java工具 1.JDK:Java开发者工具,建议安装1.8版的. 2.IEDA:集成开发环境 2.代码简单框架 public为访问修饰限定符 class为类 HelloWorld为类的名称 public static void main(String[] args)相当于C语言的的main函数 System.out.println()

  • C 语言指针变量详细介绍

    数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量. 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量.指针变量的值就是某份数据的地址,这样的一份数据可以是数组.字符串.函数,也可以是另外的一个普通变量或指针变量. 现在假设有一个 char 类型的变量 c,它存储了字符 'K'(ASCII码为十进制数 75),并占用了地址为 0X11A 的内存(地址通常用十六进制表示).另外有一个指针变量 p,它的值为 0X11A,正好等于变量 c 的地址,这种情况我

  • C语言 指针变量作为函数参数详解

    在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁. 像数组.字符串.动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合. 有的时候,对于整数.小数.字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值. 有些初学者可能会使用

  • C 语言指针变量的运算详解

    指针变量保存的是地址,本质上是一个整数,可以进行部分运算,例如加法.减法.比较等,请看下面的代码: #include <stdio.h> int main(){ int a = 10, *pa = &a, *paa = &a; double b = 99.9, *pb = &b; char c = '@', *pc = &c; //最初的值 printf("&a=%#X, pa=%#X, pb=%#X, pc=%#X\n", &

  • char str[] 与 char *str的区别详细解析

    复制代码 代码如下: char* get_str(void)  {      char str[] = {"abcd"};      return str;  } char str[] = {"abcd"};定义了一个局部字符数组,尽管是数组,但它是一个局部变量,返回它的地址肯定是一个已经释放了的空间的地址. 此函数返回的是内部一个局部字符数组str的地址,且函数调用完毕后 此数组被销毁,所以你返回的指针也就指向一块被销毁的内存,这种写法是错误的. 复制代码 代码如

  • C语言char s[]和char* s的区别

    C语言指针可以代替数组使用 1.数组本质 数组是多个元素的集合,在内存中分布在地址连续的单元中,因此可以通过其下标访问数组的不同数组. 例如: 下面展示一些 char s[3] = "0x1"; printf("s2字符串:\n"); printf("%c\n", s[0]); printf("%c\n", s[1]); printf("%c\n", s[2]); 2.指针 指针也是一种变量,只不过它的内存

  • C++中const char*、char const*、char * const三者的区别

    目录 一.const char *ptr; 二.char const *ptr; 三.char * const ptr; C/C++ 中关于以下三种定义: const char *ptr; char const *ptr; char * const ptr; 整理三者之间的区别与联系. 一.const char *ptr; 定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容,换句话说,*ptr的值为const,不能修改.但是ptr的声明

随机推荐