【C语言】关于数组的一些小问题
本文为C语言的小事系列,喜欢的同志可以订阅本专栏点→,都是在下学习时总结的精华,希望对您有所帮助。
开门见山的说:
就是本人关于一些疑难问题的总结
变长数组不能初始化
#include<stdio.h> int main() { int n = 5; int arr[n]; return 0; }
像这样编译代码一般是会报错的,但是这其实并不算一种语法错误 c99标准之前是不支持变长数组的,[]里只能是常量 c99增加了对变长数组的支持,但普遍的编译器并不支持c99,vs也是如此。
数组初始化值问题
#include<stdio.h> int main() { int brr[5]={ 1,2,3};//不完全初始化,后面的值默认为0 int crr[5] = { 1,2,3,4,5,6 };//初始化值溢出 int crr[] = { 1,2,3,4,5,6 };//不指定数组大小,对初始化值自动指定大小 return 0; }
int brr[5]={ 1,2,3};不完全初始化,后面的值默认为0 int crr[5] = { 1,2,3,4,5,6 };初始化值溢出,编译错误 int crr[] = { 1,2,3,4,5,6 };不指定数组大小,对初始化值自动指定大小
整形指针与字符指针的字节差别
众所周知:int类型是四个字节,char类型是一个字节。 int*+1,跳了4个字节,char*+1跳了1个字节。 因为在数组中地址是连续的,所以无论是数组还是字符数组。 我们都能通过指针,按照下标顺序打印。
数组常见跃界问题
#include<stdio.h> int main() { int n[] = {0}; int i = 0; for (i; i < 10; i++) { scanf("%d", n[i]);//跃界代码。 } return 0; }
一开始初始化的n数组只有一个元素,只要scanf输入了超过一个元素的话, 代码便会报错,这也是新手常见的数组错误。 C语言中在语法上对越界无法识别,编译器不一定会报错。
二维数组初始化问题
形象一下↓ int arr[ 行(横着的),列(竖着的 ) ]; 二维数组必须规定列,也就是后面那个。 二维数组会将行先放满变量,再会跳到第二行继续放变量。 调用和一维数组一样使用下标。
哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞吧
Thanks♪(・ω・)ノ
下一篇:
[java 音频处理篇]第2章 循环播放