博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
char a[] = "hello world1"和char *p = "hello world2";的区别(转)
阅读量:6092 次
发布时间:2019-06-20

本文共 1694 字,大约阅读时间需要 5 分钟。

转自:jianchi88http://blog.csdn.net/jianchi88/article/details/6876405
#include
int main(){ char a[] = "hello world1"; char *p = "hello world2"; *(a+1)='q'; *(p+1)='q'; printf("%s\n",a); printf("%s\n",p);}

运行结果

段错误。

注释 *(p+1)='q';

运行结果

hqllo world1

hello world2

原因:

 

一、a与p类型不同:p为指向字符串的指针;a为保存字符串的数组。

    char a[] = "hello world1";   是个赋初值的字符数组。

  char *p = "hello world2";  是个字符串常量指针;

指针变量p在栈里面

字符串常量"hello world2"在全局数据区,数据段,只读,不可写

二、"hello world2"和"hello world1"字符串保存的位置不同。"hello world1"保存在栈
    中,可用*(a+1)='q'修改,"hello world2"保存在全局数据
    区,位置是在.rodata中,不能修改*(p+1)='q'

三、只有2中情况下,数组名不可等同视为数组指针,&与sizeof操作符
    “&”的区别:
    &p取得是指针变量的地址,而非字符串"hello world2"的首地址,p指向字符串的首地址;&a取得
    就是字符串"hello"的首地址。
    “siziof”的区别:
    下面假设在ia32平台上运行,保存变量的内存空间不同。
    sizeof(p); // return 4, pointer size
    sizeof(a); // return 13, array size

5               char a[] = "hello world1";  (gdb) p a         $1 = "\000<\006޿�\005޿�?�"//空  (gdb) s  6               char *p = "hello world2";  (gdb) p a         $2 = "hello world1"  (gdb) p &a  $3 = (char (*)[13]) 0xbfde0583  //在栈  (gdb) s  7               *(a+1)='q';  (gdb) p p  $4 = 0x80484c0 "hello world2"  //在数据段  (gdb) p &p  $5 = (char **) 0xbfde0590   //在栈

————————————————————————————————————————————————————————————————————————————————————————————

面试题知识点:

  当指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址,但是常量内存初始化数组,情况确不一样。

char str1[] = "hello world";char str2[] = "hello world";string* str3 = "hello world";string* str4 = "hello world";问str1 == str2是否成立?str3 == str4是否成立?(提示,前一个不成立,后一个成立)
char a[] = "hello world";    char b[] = "hello world";    char *str1="hello world";    char *str2="hello world";前两个不同,后两个相同,即a!=b;str1==str2;

 

转载于:https://www.cnblogs.com/XDJjy/p/3946619.html

你可能感兴趣的文章
Android 界面设计 java.lang.NullPointerException 异常的解决方法
查看>>
解决ctrl+shift+F快捷键eclipse格式化与输入法简繁转换冲突问题
查看>>
kali在vbox上运行设置共享文件夹
查看>>
【观点】程序员的七大坏毛病
查看>>
一起谈.NET技术,Mono向Mac OS应用程序开发示好
查看>>
一起谈.NET技术,C#调试心经(续)
查看>>
是否该让开发人员跟客户直接交流
查看>>
艾伟_转载:ASP.NET实现类似Excel的数据透视表
查看>>
计算机组成原理-第3章-3.4
查看>>
Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)...
查看>>
实验八 sqlite数据库操作
查看>>
JavaScript json对象与字符串 互转
查看>>
四种简单的排序算法(转)
查看>>
Quartz2D之着色器使用初步
查看>>
多线程条件
查看>>
Git [remote rejected] xxxx->xxxx <no such ref>修复了推送分支的错误
查看>>
Porter/Duff,图片加遮罩setColorFilter
查看>>
黄聪:VMware安装Ubuntu10.10【图解】转
查看>>
Centos 6.x 升级openssh版本
查看>>
公式推♂倒题
查看>>