2019独角兽企业重金招聘Python工程师标准>>>

  1. 最近看一下php7源码

  2. 其中有个string的struct

struct _zend_string {zend_refcounted_h gc;zend_ulong        h;                /* hash value */size_t            len;char              val[1];
};

一直想不通为什么char数组而且是一个呢,为什么不是char*

然后我就做一个demo:

#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
struct _zend_string {char              val[1];
};
typedef struct _zend_string     zend_string;
#define ZSTR_VAL(zstr)  (zstr)->val
#define offsetof __builtin_offsetof
#define XtOffsetOf(s_type, field) offsetof(s_type, field)
#define _ZSTR_HEADER_SIZE XtOffsetOf(zend_string, val)
#define _ZSTR_STRUCT_SIZE(len) (_ZSTR_HEADER_SIZE + len + 1)zend_string *zend_string_alloc(size_t len)
{zend_string *ret = (zend_string *)malloc(_ZSTR_STRUCT_SIZE(len));                          return ret;
}
zend_string *zend_string_init(const char *str, size_t len){zend_string *ret = zend_string_alloc(len);memcpy(ZSTR_VAL(ret), str, len);ZSTR_VAL(ret)[len] = '\0';return ret;
}
int main(){zend_string* zs = zend_string_init("asd", 3);printf("%s\n",ZSTR_VAL(zs));return 0;}

终于想明白啦,因为最后用的val,它只是一个指向而已,而且char[1]的占位1个字节,如果用char* 就是一个指针字节(32系统就是4字节,64位系统就是8字节)空间问题呀

转载于:https://my.oschina.net/u/242853/blog/509720

char[1] or char*相关推荐

  1. char*,const char*,string的相互转换 C++

    转:https://www.cnblogs.com/wxmdevelop/p/4567857.html string转const char* string s ="abc"; co ...

  2. char *p 与char p[N]

    数组不是指针,指针也不是数组,这是两个不同的东西,只是在某些场合下,可以进行相似的操作. char a[10] = "Hello"; char *p = "World&q ...

  3. char str[]与char *str的区别

    一个具体例子: main() {char *p="abc123ABC";//char p[]="abc123ABC"int i=0;while(*(p+i)!= ...

  4. char s []和char * s有什么区别?

    在C语言中,可以在这样的声明中使用字符串文字: char s[] = "hello"; 或像这样: char *s = "hello"; 那么区别是什么呢? 我 ...

  5. 无法从“const char [10]”转换为“char *”

    无法从"const char [10]"转换为"char *" 解决方法: 项目属性  c++--> 语言-->  符合模式->> 选择 ...

  6. C++中const char*, string 与char*的转化

    C++中const char*, string 与char*的转化 原文:https://blog.csdn.net/zhang_alongzd/article/details/52790905 版权 ...

  7. char[]数组与char *指针的区别

    char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...

  8. 【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Visual Studio 2019 中编译 Android NDK , 构建方式参考 [Android 逆向]Android 进程注入工具开发 ...

  9. GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!

    void GetMemeory(char *p) {p=(char*)malloc(100); }void main() {char *str=NULL;GetMemory(str);strcpy(s ...

  10. char s[] 和 char *s 的区别

    第一种: char *a 与char a[] 的区别 char *d = "hello" 中的a是指向第一个字符'a'的一个指针:char s[20] = "hello& ...

最新文章

  1. Mysql锁专题:InnoDB锁概述
  2. ROS Melodic安装、配置和使用turtlebot2(集成众多源代码直接下载)
  3. 对象的notify方法的含义和对象锁释放的三种情况
  4. pthread 立即停止线程_线程取消(pthread_cancel)
  5. IPFS: BitSwap协议(数据块交换)
  6. Taro+react开发(36)每一个节点要一个view包裹
  7. 8-3:C++继承之继承中的作用域,隐藏,重定义和静态成员
  8. flask-sqlalchemy 数据基本操作--实例
  9. Java Web开发实战(一)—JDK安装及环境变量配置
  10. 最新邮箱匹配正则(邮箱前缀可包含_)
  11. 中间件是什么意思?中间件技术简介
  12. 【图像处理】换脸技术哪家强?Python来挑战,一键换脸,毫无破绽~
  13. Python简介及入门
  14. Mac OS中隐藏和显示文件的操作
  15. 光猫,交换机和路由器的区别
  16. 第九章-项目人力资源管理
  17. 计算机试题四北京网络教育,网络教育统考计算机模拟真题选择题(四)
  18. 基于java+SSM+jsp的酒店管理系统(附源码)
  19. Python 实现 PTA 平台 基础编程题目集
  20. 小程序云开发获取不到数据库的记录

热门文章

  1. 尖峰 mysql 源码方向_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...
  2. es写入数据的工作原理是什么啊?es查询数据的工作原理是什么啊?
  3. angular 定义对象_angular – 使用对象定义定义FomGroup
  4. 小记mysql备份同库中一张表的历史记录
  5. Swift溢出运算符
  6. iOS中UIActionSheet使用详解
  7. mysql 触发器 实例_mysql的触发器-含案例-含效果 | 时刻需
  8. 废旧光盘手工小制作_[创意手工]废旧光碟手工制作变废为宝
  9. mysql 时间点_MySQL 基于时间点与位置恢复
  10. python做一个考试系统_请用 Python 语言编写一个简易的系统登录程序。