【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♪(・ω・)ノ

经验分享 程序员 微信小程序 职场和发展