作者目前就读于,双非本科,大一,很多地方理解不当还望各位大佬耐心教导。万分感谢!
本文为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♪(・ω・)ノ
(期待一下,要是有分享和收藏更好啦)