概念
分类
根据数据类型的不同:
概念
C语言数组在存储时,是行优先 多维数组下,如二维数组,可以看成是嵌套:一个数组可以作为外部数组的一个元素 C语言数组是静态的,不能插入或删除元素(数组一旦被定义,占用的内存空间就是不可改变的,但是可以修改和读取数值),如果要改变一个数组,就要再造一个数组
数值数组
创建数组:赋值个数小于开辟的内存空间,且剩余的元素会被初始化为0,对于整型,初始化为0;对于浮点型,初始化为0.0
int a[10]={1,2,3};
for (int i=0;i<10;i++){
printf("%d\n",a[i]);
}
int a[]={1,2,3,4};
多维数组
创建数组:可以按行创建,也可以连续创建。部分赋值创建的时候,其他赋值元素默认初始化为0(注意部分赋值和完全不赋值随机初始化的区别,完全不赋值随机初始化的时候不是0) 如果是全部赋值,第一维度可以不写 嵌套理解
int a[2][3]={{1,2,3},{4,5,6}};
int a[2][3]={1,2,3,4,5,6};
int a[2][3]={{1},{2},{3}};
int a[2][3]={{0,1},{0,1,2},{3}}
int a[][3]={1,2,3}
int a[][3]={1,2,3};
for (int i=0;i<1;i++){
for (int j=0;j<3;j++){
printf("%d\n",a[i][j]);
}
}
a[3][4] 中 a[0]是一个数组
多维数组的指针
https://blog.csdn.net/L_fengzifei/article/details/126411708
见下例子
int a[1][3]={1,2,3};
for (int i=0;i<1;i++){
printf("%p\n",a[i]);
printf("%p\n",&a[i][0]);
printf("%d\n",a[i][0]);
}
数组与地址
int c[10]={1,2,3};
printf("%p\n",&c);
printf("%p\n",c);
printf("%p\n",&c[0]);
数组与指针
https://blog.csdn.net/L_fengzifei/article/details/126411708
问题
下面会输出十个数,并没有发生越界???
int a[4];
for (int i=0;i<10;i++){
printf("%d\n",a[i]);
}
return 0;
字符型数组
对于字符型数组,赋值个数小于开辟的内存空间,则初始化为"\0" ,printf("%c","\0") 打印不出来任何东西
字符数组就是字符串 c语言中没有字符串类型,所以用 字符数组存放一个字符串
char str[10]={0}
char s[10];
char s[2][3];
char c[20]={' ','2'};
char d[]={'h','e',...};
char s[10];
s="hello world";
s[0]='0';
字符串
字符串 其实是字符数组 字符数组就是字符串 c语言中没有字符串类型,所以用 字符数组存放一个字符串 可以通过索引获得元素字符 注意:,下面创建的字符串,具有读写权限
char s[30]={"hello world"};
char s[10]="hello world";
char s[]={"hello world"};
char s[]="hello world";
char a[10]="hello";
printf("%c\n",a[1]);
长度
strlen 计算不包括结尾的\0 sizeof 计算包含结尾的\0
#include <string.h>
char str[]="hello";
long len=strlen(str);
printf("%ld\n",len);
char a[10]="hello";
printf("%d",sizeof(a));
\0
\0 不能显示,也没有控制功能 字符串以\0 结尾,注意字符数组不以\0 结尾 字符串逐个扫描,一旦遇到\0 结束处理
"string"会在字符串自动在末尾添加\0 字符串的字符个数,要包括后面结尾的\0 创建的时候,要为\0,多开辟一个内存空间,所以总数要比字符串+1
char s[30];
chr c;
int i;
for (c=65,i=0;c<=90;c++,i++){
s[i]=c;
}
printf("%s\n",s)
s[i]=0;
s[i]='\0';
字符串与地址
char a='c';
printf("%p\n",&a);
printf("%p\n",a);
char b[10]="hello";
printf("%p\n",&b);
printf("%p\n",b);
printf("%p\n",&b[0]);
int c[10]={1,2,3};
printf("%p\n",&c);
printf("%p\n",c);
printf("%p\n",&c[0]);
字符串与指针
https://blog.csdn.net/L_fengzifei/article/details/126411708
指针数组
数组中所有元素保存的都是指针,就叫做指针数组 dataType *arr[] ,dataTye* (arr[]) 表明是一个数组,每个元素的类型都是dataType* 注意 指针数组和二级数组的区分
int* arr[3]={&a,&b,&c};
int** p=arr;
char* str[2]={"hello","world"};
printf("%s\n",str[0]);
char* s1="hello";
char* s2="world";
char* s[2]={s1,s2};
结构体数组
数组中每个元素都是结构体
struct stu{
char* name;
int num;
}class[5];
struct stu{
char* name;
int num;
}class[5]={
{"li",1},
{"w",2}
};
struct stu{
char* name;
int num;
}class[]={
{"li",1},
{"w",2}
};
struct stu class[]={
{"li",2},
{"wang",3}
};
class[0].name;
class[1].num=2;
|