main() { char a[]="abcdefg",b[10]="abcdefg"; printf("%d %d\n",sizeof(a),sizeof(b));}请解释执行结果 #include <stdio.h> int main(vo...

#include<stdio.h> main() {char a[]=\u201cabcdefg\u201d; printf("%d\n",sizeof(a));}

// \u603b\u7ed3\u4e00\u4e0b// \u5047\u8bbe\u8ba1\u7b97\u673a\u5b57\u957f32\u4f4d\uff0c\u6240\u6709\u6307\u9488sizeof\u90fd\u662f4char a[10]; // sizeof(a) == 10\uff0c\u6570\u7ec4\u5c31\u662f\u6570\u7ec4\u6240\u5360\u7a7a\u95f4char b[] = "abcdefg"; // sizeof(b) == 8\uff0c\u4e5f\u662f\u6570\u7ec4\uff0c\u5927\u5c0f\u7531\u540e\u9762\u7684\u5b57\u7b26\u4e32\u51b3\u5b9a\uff0c\u522b\u5fd8\u4e86\u672b\u5c3e\u76840char *p = a; // sizeof(p) == 4\uff0c\u5c31\u662f\u6307\u9488char *q = malloc(10); // sizeof(q) == 8\uff0c\u4e5f\u662f\u6307\u9488\uff0c\u8ddf\u540e\u9762\u7684malloc\u6ca1\u5173\u7cfbvoid f(char a[10]) { sizeof(a) // \u4f5c\u4e3a\u51fd\u6570\u7684\u53c2\u6570\uff0c\u6570\u7ec4\u4f1a\u9000\u5316\u4e3a\u6307\u9488\uff0c\u6240\u4ee5\u662f4}

b\u662fchar\u6307\u9488\uff0c\u6307\u9488\u572832\u4f4d\u7cfb\u7edf\u4e0b\u4e00\u822c\u662f4\u4e2a\u5b57\u8282\u3002

结果为:8 和10
一个字符占一个字节,sizeof就是求所占的字节数的。
a编译会自动在后面添加一个'\0'表示结束符,所以为 7+1=8。
b是一个静态数组,里面的10表示其元素的个数,系统分配的时候按照这个来分配。

输出8和10;
a里面有8个字节,b有10个字节。
b指定了10位的char型的数组。
char占1个字节所以b的长度就是10个字节;
a则是动态的指定了abcdefg\0八位字符。所以数组a是8位。占8个字节

6 + 1(‘\0’)
10 固定了

屏幕输出 7 10换行

扩展阅读:char str 10 china ... ascus是tct最轻的症状吗 ... sigma-aldrich ... char s 6 s 3 ... machine gun kelly ... getchar ... char str 1234 ... char str abc ... c char ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网