c与c++中输出字符指针和字符串指针的问题

首先搞清楚在c语言中没有字符串的类型,所以对字符串操作,有两种形式:可以用字符指针,或者字符串数组(这里的指针变量c,系统会为其重新分配内存。

c程序示例:

1  #include <stdio.h>
  2
  3 int main()
  4 {
  5   char *a="hello";
  6   char b[]={‘l‘,‘i‘,‘n‘,‘u‘,‘x‘};
  7   char *c=&b[1];
  8
  9    printf("%c\n",*a);
 10   printf("%s\n",a);
 11   printf("%s\n",c);
 12   printf("%s\n",b);
 13   printf("%c\n",*c);
 14  return 0;
 15 }

执行效果如下:

[lm[email protected] ~]$ ./cp
h
hello
inux
linux
i
4

其中解引用a时,输出指针指向的第一个字符 “h”,而printf(“%s\n”,a)时因为规定了输出字符串的格式,所以不会输出c的地址,而是“hello”这个字符串。 printf("%d\n",a)时则输出十进制的c指向的地址。

c++程序示例:

1 #include <iostream>
  2 #include <stdio.h>
  3 #include <string.h>
  4 using namespace std;
  5
  6 int main()
  7 {
  8     string s ="string";
  9     string *p=&s;
 10     char * c="hello";
 11     cout<<*c<<endl;
 12     cout<< c<<endl;
 13     cout<<s<<endl;
 14     cout<<*p<<endl;
 15     cout<<p<<endl;
 16     return 0;    
 17 }
cout输出时是自动判断输出的格式,而且有 string 来表示字符串,*p 解引用输出的是整个字符串,而 p 输出的是字符串的首地址。在cout<<c 时自动判定为输出字符串, * c 解引用c时 输出字符串的第一个字符 “h”。

执行结果:[[email protected] ~]$ ./test
h
hello
string
string
0x7fff97664730

原文地址:https://www.cnblogs.com/sanerer/p/9351189.html

时间: 2024-08-12 23:11:11

c与c++中输出字符指针和字符串指针的问题的相关文章

C语言中字符数组和字符串指针分析

这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这做个小总结,也算加深下自己的印象,写了下面的测试程序: #include <stdio.h> int main(int argc, char *argv[]){ char day[15] = "abcdefghijklmn";  char* strTmp = "opq

字符数组和字符串指针的定义

今天在看书上的一段代码的时候发现有一段代码有问题,对于那段代码的错误进行一下解释. 并加强一下我们常用的两种定义字符串的方法的一些区别进行一下解释. 书上的错误代码大概如下: #include<stdio.h> void copy(char *x,char *y) { for(;*y!='\0';x++,y++) *x=*y; *x='\0'; printf("%s\n",a); } int main() { char *a="Hello!"; char

关于“C语言中的字符数组和字符串”一些需要注意的基础点

在C语言中,没有类似Java的String类对字符串的处理,字符串的包装可以采用字符数组. 先看字符数组: #include<stdio.h> void main() { char array[] = {'a','b','c'}; int str = sizeof(array)/sizeof(char); printf("%d",str); } 此时的输出结果为:3,即字符数组的长度为3. 下面我们用字符串初始化字符数组,代码如下. #include<stdio.h&

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数?? 指针与数组 1.数组名:数组元素首地址 eg: int array[3]={1,3,6}; 这里array 恒等于&array[0] 2.int *p = a; int *p = 0; int a[]={0}; 3.int *p = a; 均指向数组的首地址 *p是? *(p+1)是?(*p)+1是? *(p+1)决定向下移动几个字节是类型 4.指针可以当数组名使用 p[1] = 3; 恒等于a[1] ;恒等于*(p+1);恒等于*(a+1) 5.

结构体指针内存——指针数组——字符串指针内存申请

前几天用的结构体,结构体内还包含有结构体指针和数组以及指向字符串的指针,发现自己对这方面的东西还很容易犯错,故现在讲其中容易出错的地方写出来,分享给大家也方便自己日后查看. typedef struct { char name[50]; char job[50]; int age; int people_id; } peopleInfo; typedef struct { bool typeAdd; bool typeDel; int length; peopleInfo *info; char

C++中的字符(串)指针

(一)char       wchar_t(WCHAR)       TCHAR ANSI:char是8位ANSI字符的数据类型,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数. UNICODE:wchar_t是16位Unicode字符的数据类型,可用字符串处理函数:wcscat(),wcscpy(),wcslen()等以wcs打头的函数.它实际定义在里:typedef unsigned short wchar_t.在头文件中有这样的定义:t

字符数组与字符串指针

字符数组: 数组名是一个指针常量,不能直接赋值,即 char str[10]; str = "abcd"; 不能出现对数组名的自加或者自减,即str++, str--; 1 //字符数组(C风格字符串) 2 int main(){ 3 char str1[] = "abc"; 4 char str2[] = {'a', 'b', 'c'};//不以空字符结束,产生未定义行为 5 char str3[] = {"abc"}; 6 char str4

字节流之向文件中写入字符串并读出字符串

1.InputStream(输入字节流) InputStream是一个定义了Java流式字节输入模式的抽象类,该类的所有方法在出错时都会引发一个IOExceptin异常.  方法                          描述  int available()             返回当前可读的输入字节数 void close()               关闭输入流.关闭之后若再读取则会产生IOException void mark(int numBytes)   再输入流当前带

使用sscanf函数提取某个字符串中某个字符后面的字符串的方法

1,例子1: #include <stdio.h>#include <stdlib.h>main(){char s[]="abc 123 n:xyz";char s2[80];sscanf(s,"%*[^:]:%s",s2);printf("%s",s2);} 2,例子2:取出=之后的数字 // 格式 "verno=DP_B002_REL_V10","interval=0",&quo