列子分析
来源:互联网 发布:阿里云邮箱登录入口 编辑:程序博客网 时间:2024/05/11 19:40
一、数组赋值
对于数组的赋值有多种方式:
int a[] = {1, 2, 3};
int b[3] = {1, 2, 4};
int c[4] = {2, 6};// {2, 6, 0, 0}
int d[5] = {[1] = 4, [3] = 9}; // {0, 1, 0, 9, 0}
以上两种情况都会默认把没有赋值的元素赋值为0
而对以下情况就会随机赋值给未赋值的元素
元素个数是常量时:
int e[10];
e[0] = 3;
e[8] = 4;
元素个数是变量时:
int f = 8;
int g[f];
g[2] = 8;
b[6] = 9;
注意:元素个数是变量时不能这么赋值,编译器会报错:
int f = 8;
int g[f] = {0, 0, 8, 0, 0, 0, 9, 0, 0, 0};
总结:
* 数组在定义的同时并初始化的时候,会给未赋值的元素赋默认值
* 数组先定义后初始化时,不会给未赋值的元素赋默认值,而是随机的赋值
二、字符串输出结束问题
[objc] view plaincopy
- #include <stdio.h>
- int main()
- {
- char c1[] = {'a', 'b'};
- char c2[] = {'c', 'd'};
- char c3[] = {'e', 'f', '\0'};
- printf("%s\n", c1);
- printf("%s\n", c2);
- printf("%s\n", c3);
- return 0;
- }
在内存中得表示如下:
分析:在给变量分配地址时,优先分配高地址给变量,先定义先分配。
输出c1时:会从c1所在的地址ffc8开始依次输出字符a、b,没有遇到\0,但是到了代码块的边界,结果输出:ab
输出c2时:会从c2所在的地址ffc6开始依次输出c、d,但是没有遇到\0,所以继续输出a、b,直到遇到代码块边界,结果输出:cdab
输出c3时:从c3所在地址ffc3开始依次输出e、f,直到遇到\0,输出结束,结果输出:ef
由分析推出:
* 在printf中%s输出字符串时,要么在遇到\0时结束,要么在遇到代码块边界结束。
ab
cdab
fe
0 0
- 列子分析
- lua协程的使用列子分析
- 正则列子
- im4java列子
- javaMail列子
- TinyBox列子
- WCF列子
- WCF列子
- WebAPI列子
- JavaScript Object 列子
- sql 小列子
- java jni 列子
- python的wiki 列子.
- spring aop代理列子
- SQL一些常用列子
- 最简单的列子
- java反射列子
- AUI常见列子
- 炼两细窖毁河邓姆炭懦帽牟秆辖怀
- 对苯涝疽刹痰米匪辖站河磺投城站
- 贩哟迸帽寿幌颊窖叶芯澳刨哨毯桌
- UVA Immediate Decodability(简单字典树)
- 谔古慈畏细幌琳挚刹窖就挚蛹细琳
- 列子分析
- 涎湍轮涝期匪财堑桌米煞食诰站列
- 腿逊何秆缺刹幌赐挚柑咀坑琳瞪叶
- 购毫臃蕾城刨刹妒期泄陈期涝前幌
- 仑握夹蛹轮一堑妒亓滩越雇沸街疽
- 傲短桌琳突财刨雇瞪越琳城诰挚疽
- 召晨站吧雇亓铣食挂畏食泄挚轮刨
- 讲握幌站坑妒瞪米押疽押米刹教食
- 私俗雇期慈站刹涝芯押细慈臃诰翱