char[1] or char*
2019独角兽企业重金招聘Python工程师标准>>>
最近看一下php7源码
其中有个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*相关推荐
- char*,const char*,string的相互转换 C++
转:https://www.cnblogs.com/wxmdevelop/p/4567857.html string转const char* string s ="abc"; co ...
- char *p 与char p[N]
数组不是指针,指针也不是数组,这是两个不同的东西,只是在某些场合下,可以进行相似的操作. char a[10] = "Hello"; char *p = "World&q ...
- char str[]与char *str的区别
一个具体例子: main() {char *p="abc123ABC";//char p[]="abc123ABC"int i=0;while(*(p+i)!= ...
- char s []和char * s有什么区别?
在C语言中,可以在这样的声明中使用字符串文字: char s[] = "hello"; 或像这样: char *s = "hello"; 那么区别是什么呢? 我 ...
- 无法从“const char [10]”转换为“char *”
无法从"const char [10]"转换为"char *" 解决方法: 项目属性 c++--> 语言--> 符合模式->> 选择 ...
- C++中const char*, string 与char*的转化
C++中const char*, string 与char*的转化 原文:https://blog.csdn.net/zhang_alongzd/article/details/52790905 版权 ...
- char[]数组与char *指针的区别
char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...
- 【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 Visual Studio 2019 中编译 Android NDK , 构建方式参考 [Android 逆向]Android 进程注入工具开发 ...
- 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 ...
- char s[] 和 char *s 的区别
第一种: char *a 与char a[] 的区别 char *d = "hello" 中的a是指向第一个字符'a'的一个指针:char s[20] = "hello& ...
最新文章
- Mysql锁专题:InnoDB锁概述
- ROS Melodic安装、配置和使用turtlebot2(集成众多源代码直接下载)
- 对象的notify方法的含义和对象锁释放的三种情况
- pthread 立即停止线程_线程取消(pthread_cancel)
- IPFS: BitSwap协议(数据块交换)
- Taro+react开发(36)每一个节点要一个view包裹
- 8-3:C++继承之继承中的作用域,隐藏,重定义和静态成员
- flask-sqlalchemy 数据基本操作--实例
- Java Web开发实战(一)—JDK安装及环境变量配置
- 最新邮箱匹配正则(邮箱前缀可包含_)
- 中间件是什么意思?中间件技术简介
- 【图像处理】换脸技术哪家强?Python来挑战,一键换脸,毫无破绽~
- Python简介及入门
- Mac OS中隐藏和显示文件的操作
- 光猫,交换机和路由器的区别
- 第九章-项目人力资源管理
- 计算机试题四北京网络教育,网络教育统考计算机模拟真题选择题(四)
- 基于java+SSM+jsp的酒店管理系统(附源码)
- Python 实现 PTA 平台 基础编程题目集
- 小程序云开发获取不到数据库的记录
热门文章
- 尖峰 mysql 源码方向_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...
- es写入数据的工作原理是什么啊?es查询数据的工作原理是什么啊?
- angular 定义对象_angular – 使用对象定义定义FomGroup
- 小记mysql备份同库中一张表的历史记录
- Swift溢出运算符
- iOS中UIActionSheet使用详解
- mysql 触发器 实例_mysql的触发器-含案例-含效果 | 时刻需
- 废旧光盘手工小制作_[创意手工]废旧光碟手工制作变废为宝
- mysql 时间点_MySQL 基于时间点与位置恢复
- python做一个考试系统_请用 Python 语言编写一个简易的系统登录程序。