--------------------------------------------IOS期待与您交流!--------------------------------------------
一、数组赋值
对于数组的赋值有多种方式:
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};
总结:
* 数组在定义的同时并初始化的时候,会给未赋值的元素赋默认值
* 数组先定义后初始化时,不会给未赋值的元素赋默认值,而是随机的赋值
二、字符串输出结束问题
输出:#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; }
ab
cdab
fe
在内存中得表示如下:
分析:在给变量分配地址时,优先分配高地址给变量,先定义先分配。
输出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时结束,要么在遇到代码块边界结束。
待续......
--------------------------------------------IOS期待与您交流!--------------------------------------------
详细请查看:http://edu.csdn.net