sizeof(char**),sizeof(char*), sizeof(char)小注

sizeof(char) → 返回char型所占空间:1 (Byte)

sizeof(char*) → 返回char*型指针所占空间:4 (Byte)

sizeof(char**) → 返回该字符串指针数组里元素所占空间:n*4(n为字符串指针数组元素个数,也即数组的字符串个数)

比如 char *strlist[] = {"American", "Germany", "Japan", "China", "France", "Russia"}

此时sizeof(strlist) = 6*4 = 24(Byte),代表着6个char*类型的总大小。

所以想求的字符串指针数组的字符串元素个数就可以用 sizeof(strlist)/sizeof(char*)来得到。

时间: 2024-07-30 20:23:06

sizeof(char**),sizeof(char*), sizeof(char)小注的相关文章

C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size

#include <stdio.h> #include <string.h> int main() { char a[10] = "\0"; char *pa = (char *)&a; char (*paa)[10] = &a; printf("-----a[10]----\n"); printf("a size:%d, pa size;%d, *pa size:%d, *paa size:%d\n",

C/C++ sizeof函数解析——解决sizeof求结构体大小的问题

C/C++中不同数据类型所占用的内存大小 32位                 64位 char               1                    1 int                  4             大多数4,少数8 short              2                    2 long               4                    8 float               4              

C语言 结构体指针赋值 incompatible types when assigning to type &#39;char[20]&#39; from type &#39;char *&#39;

strcpy(pstudent->name, "guo zhao wei "); 为什么错误,该怎么写,(红色行) 追问 为什么不能直接赋值啊, 追答 用char nnnn[20]定义的,用strcpy 用char *ppp定义的,用=来赋值 C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

char*,string和const char*间的转换

//1.char*转string char* c ="abc"; string s(c); //2.const char*转string const char* c_s ="abc"; string s(c_s); //3.string转const char* string s ="abc"; const char* c_s = s.c_str(); //4.string转char* string s="abcde"; con

char *p=&quot;abc&quot; 与 char p[]=&quot;abc&quot; 的区别

本文来源于网络 出处:点我 有这样一段代码: #include "stdio.h" char *get_string_1() { char p[] = "hello world!"; return p; } char *get_string_2() { char *p = "hello world!"; return p; } int main() { char *p; p = get_string_1(); printf("get_s

C# byte[]与char[]、string与char[]、byte[] 与 string 互转

1. byte array -> char array Byte[] b=new byte[5]{0x01,0x02,0x03,0x04,0x05}; Char[] c=Encoding.ASCII.GetChars(b); 2. char array -> byte array Char[] c=new char[5]{a,b,c,d,e}; Byte[] b=Encoding.Default.GetBytes(c); Char[] c=new char[5]{a,b,c,d,e}; Byt

char str[] = {&quot;abcd&quot;}和 char* str = {&quot;abcd&quot;}的区别

char str[] = {"abcd"}和 char* str = {"abcd"}的区别 char* get_str(void) { char str[] = {"abcd"}; return str; } char str[] = {"abcd"};定义了一个局部字符数组,尽管是数组,但它是一个局部变量,返回它的地址肯定是一个已经释放了的空间的地址. 此函数返回的是内部一个局部字符数组str的地址, 且函数调用完毕后 此

c++中new char(10) 和 new char[10]的区别

今天随手写个程序,在网上随意找个代码照着写,无意中使用了 char *p = new char(10); 来创建char数组,而且在netbeans上编译运行都没有问题,结果在oj上一直报runtime error,放在同学计算机上用codeblock运行也报错. 后来发现是这个分配的问题: char *p = new char[65]; // 分配一个大小为65的char数组 char *p = new char(65); //分配一个char ,并用65来初始化值 后来程序中改成new ch

深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p

由于没有const*运算,const实际上修饰的是前面的char*,但不能在定义时转换写成 const(char *)*p,因为在定义是"()"是表示函数. 三.深入理解7种组合 (0)程序 在执行时为其开辟的空间皆在内存(RAM)中,而RAM里的内存单元是可读可写 的:指针只是用来指定或定位要操作的数据的工具,只是用来读写RAM里内存单元的工作指针 .若对指针不加任何限定,程序中一个指针可以指向RAM中的任意位置(除了系统敏感区,如操作系统内核所在区域)并对其指向的内存单元进行读和写

【转】深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p

一.可能的组合: (1)const char*p (2)char const*p (3)char *const p(4)const char **p (5)char const**p (6)char *const *p (7)char **const p 当然还有在(5).(6).(7)中再插入一个const的若干情况,不过分析了以上7中,其他的就可类推了! 二.理解助记法宝: 1.关键看const 修饰谁. 2.由于没有 const *的运算,若出现 const * 的形式,则const实际上