指向字符串的指针在printf与cout区别
根据指针用法: * 定义一个指针, &取变量地址,
int b = 1;
int *a = &b;
则*a =1,但对于字符串而言并非如此,直接打印指向字符串的指针打印的是地址还是字符串本身,具体看情况。
定义:
char *m1 = "coconut is lovely";
char *m2 = "passion fruit isnice";
char *m3 = "craneberry is fine";
注:实际声明应该是const char *m1,原因char *背后的含义是:给我个字符串,我要修改它,此处应该是要读取它,具体参考
测试输出:
用cout 打印*m1:
cout<<"Now use cout to print *m1="<<*m1<<endl;
打印输出:
Now use cout to print *m1=c
即输出m1指向字符串的第一个字符。
用cout打印m1:
cout<<"Now use cout to print m1="<<m1<<endl;
输出:
Now use cout to print m1=coconut is lovely
即输出m1所指的内容,而不是m1指向的地址
用printf打印%c\n", *m1:
printf("Now use printf to print *m1=%c\n", *m1);
输出:
Now use printf to print *m1=c
即为m1指向的字符串的第一位的内容,但注意是%c而不是%s。因为是字符型,而非字符串型。所以以下表达错误: printf("Now use printf to print *m1= %s\n", *m1);
用printf 打印 %d m1
printf("Now use printf to print m1=%d\n", m1);
输出:
Now use printf to print m1=4197112
即m1是指针,输出m1所指向的地址。上面例子中的cout<<m1输出的是字符串内容。二者不一致,似乎反常了。但是我们可以使得它们行为一致。如下:
用printf打印%s m1:
printf("Now use printf to print m1= %s\n",m1);
输出:
Now use printf to print m1= coconut is lovely
即m1是指针,输出m1所指向的地址。使用%s而非%d就可以使得m1不去表示地址而去表示字符串内容。
完整例子:
#include <stdio.h>
#include <iostream>
using namespace std; int main()
{
char *m1 = "coconut is lovely";
char *m2 = "passion fruit isnice";
char *m3 = "craneberry is fine";
char* message[];
int i; //cout *m1
cout<<"Now use cout to print *m1="<<*m1<<endl;
//cout m1
cout<<"Now use cout to print m1="<<m1<<endl;
//cout (int)m1: 64位机char*类型大小位8B,用long转换
cout<<"Now use cout to print m1="<<(int)m1<<endl;
//printf %c *m1
printf("Now use printf to print *m1=%c\n", *m1);
//printf %s *m1
// printf("Now use printf to print m1= %s\n",*m1);
//printf %d m1
printf("Now use printf to print m1=%d\n", m1);
//printf %s m1
printf("Now use printf to print m1= %s\n",m1);
/*
message[0] = m1;
message[1] = m2;
message[2] = m3; for (i=0; i<3; i++)
printf("%s\n", message[i]);
*/
}
输出:
Now use cout to print *m1=c
Now use cout to print m1=coconut is lovely
Now use cout to print m1=4197320
Now use printf to print *m1=c
Now use printf to print m1=4197320
Now use printf to print m1= coconut is lovely
Ref:
- http://blog.csdn.net/feliciafay/article/details/6818009
指向字符串的指针在printf与cout区别的更多相关文章
- 指向字符串的指针和char类型的数组
指针数组的效率比二维字符数组的效率高 指针数组不能修改字符串字面量,而二维字符数组中的内容可以更改
- C++(二十四) — 指向字符的指针为什么可以用字符串来初始化,而不是字符地址?
一.C语言中,为什么字符串可以赋值给字符指针变量? char *p: a='; p=&a; //显然是正确的, p="abcd"; //但为什么也可以这样赋值?? 问:一直 ...
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- 12-返回指针的函数&&指向函数的指针
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...
- C语言之数组,字符串,指针
一. 数组的定义 1. 数组初始化 初始化方式 int a[3] = {10, 9, 6}; int a[3] = {10,9}; int a[] = {11, 7, 6}; int a[4] = ...
- 【C语言】14-返回指针的函数与指向函数的指针
前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如 ...
- 指向函数的指针 分类: C/C++ 2015-07-13 11:03 14人阅读 评论(0) 收藏
原文网址:http://www.cnblogs.com/zxl2431/archive/2011/03/25/1995285.html 讲的很清楚,备份记录. (一) 用函数指针变量调用函数 可以用指 ...
- 「C」 数组、字符串、指针
一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数 ...
- 指向函数的指针 ------ 函数指针(function pointer)
函数指针: 指向函数的指针, 首先是一个指针, 这个指针指向一个函数. 函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数 ...
随机推荐
- table中tr间距的设定table合并单元格 colspan(跨列)和rowspan(跨行)
table中的tr的默认display:table-row,虽然可以修改为display:block但是就失去了tr特有的显示效果,如(td自动对齐): 并且在tr中对起设定padding是有用的,可 ...
- hadoop之 hadoop 机架感知
1.背景 Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份.这样如果本地数据损坏,节点可以从同一机 ...
- Web验证方式(2)--Form Authentication
Form验证方式并不是HTTP标准,而是在微软ASP.NET Web框架下提供的一种验证方式.其大致流程如下: 在上图的流程中,ASP.NET框架提供了如下支持类:( FormsAuthenticat ...
- PHP代码实现 1
$PHP-SRC/run-test.php 因为如果在同一个进程中执行, 测试就会停止,后面的测试也将无法执行,php中有很多将脚本隔离的方法比如: system(),exec()等函数,这样可以使用 ...
- 黄聪:VPS服务器如何配置PHP.ini解决wordpress使用WP-Mail-SMTP插件发邮件出现Could not connect to SMTP host的解决办法
1.首先是WP-Mail-SMTP的下载地址:http://wordpress.org/plugins/wp-mail-smtp/ 2.出现Could not connect to SMTP host ...
- java 静态方法上的泛型
靜態方法上的泛型 泛型也可以僅定義在靜態方法上,舉例而言,在 定義與使用泛型 中自定義過支援泛型的ArrayList,如果現在想寫個asArrayList方法,可指定不定長度引數,將之轉換為Array ...
- Java 字符串拼接 StringBuilder() StringBuffer
字符串拼接 普通方式 public class StringDemo2 { public static void main(String[] args) { // 表示获取从1970- ...
- mysql为什么会慢
--2019.4.18 mysql技术大会分享--叶金荣mysql为什么会慢性能瓶颈分析.排查思路 先确认一下真的是mysql响应慢了吗导致mysql慢可能会有那些因素呢?--资源稀缺 ---cpu, ...
- sql 存储过程返回值 变量名
return 语句返回值,前台调用的参数名称为 @RETURN_VALUE
- JDK静态代理示例代码
JDK静态代理示例代码 业务接口 接口的实现类 代理类,实现接口,并扩展实现类的功能 1.业务接口 /** * 业务接口 * @author pc * */ public interface User ...