zoukankan      html  css  js  c++  java
  • c字符指针与字符数组的区别

    1.定义

    char *pchar;  //定义了指针,没赋值之前不能使用。如果:printf("*pchar:%c ",*pchar); 出现段错误Segmentation fault (core dumped)

    gcc 中pchar 指向了0这个虚拟地址空间。显然个空间并没有物理地址映射。

    char arrchar[10]; //分配了空间

    #include <stdio.h>
    void main()
    {
    	char *pchar;
    	char achar[10];
    	printf("pchar: %x
    ",pchar);	
    	printf("&pchar: %x
    ",&pchar);	
    	printf("&pchar[0]: %x
    ",&pchar[0]);	
    //	printf("*pchar:%c
    ",*pchar);Segmentation fault (core dumped)
    	printf("ppchar: %p
    ",pchar);	
    	printf("achar: %x
    ",achar);	
    	printf("&achar: %x
    ",&achar);	
    	printf("&achar[0]: %x
    ",&achar[0]);	
    	printf("pachar: %p
    ",achar);	
    }
    

      

    结果:

    pchar: 0
    &pchar: 69a39e98
    &pchar[0]: 0
    ppchar: (nil)
    achar: 69a39e80
    &achar: 69a39e80
    &achar[0]: 69a39e80
    pachar: 0x7fff69a39e80

    注意:&pchar 和pchar  和pchar[0] 和pchar+0 之间的区别   后三个其实是等价的。

    内存分布

    2.定义的时候初始化

    char *p = "hello"; //p指向了一个常量字符串( 代码区--只读) 因此不可改变 *p='a'//报错 但可以p = "world";

    char arr[10] = "hello"; //可以改变arr[0] = 'a'

     对于数组

    不可以这样:

    char arr[10];
    arr = "hello";

    应该 strcpy(arr,"hello");

  • 相关阅读:
    正则表达式--验证中国手机号
    PostgreSQ数据库安全连接请求问题
    golang时间正反格式化
    Git 分支管理和冲突解决
    golang交叉编译
    ps命令
    Redis应用场景
    SecureCRT for Mac
    Redis作者谈Redis应用场景
    redis 五种数据的应用场景
  • 原文地址:https://www.cnblogs.com/andyhe/p/3199494.html
Copyright © 2011-2022 走看看