一维数组定义及初始化
定义
格式: 类型说明符 数组名[常量表达式]; 在定义数组时,需要指定数组中元素的个数。方括号中的常量表达式就是用来指定元素的个数。数组中元素的个数又称数组的长度。
int a[5];5 个int型变量就占 20 字节的内存空间,而且它们的地址是连续分配的。
初始化
正确写法
1-- int a[5] = {1, 2, 3, 4, 5};
2-- int a[5] = {1, 2};
3-- int a[] = {1, 2, 3, 4, 5};
错误写法
1-- int a[5]={};
2-- a[2]={1,2,3,4,5};
3-- int a[];
数组名和指针的区别联系
参考:https://blog.csdn.net/findgeneralgirl/article/details/78501734。 (自己的问题不在这里,而在于c语言如何将结构体数组作为函数入参使用)
结构体入参(c语言使用)
#include<stdio.h>
typedef struct list{
int a;
int b;
int c;
int d;
}list;
void test(list tmp){
printf("%d\n",tmp.b);
}
int main(void){
list tmp={.a=10,.b=20,.c=30,.d=40};
test(tmp);
}
#include<stdio.h>
typedef struct list{
int a;
int b;
int c;
int d;
}list;
void test(list *tmp){
printf("%d\n",tmp->b);
}
int main(void){
list tmp={.a=10,.b=20,.c=30,.d=40};
test(&tmp);
}
C语言的*和&(这块其实也不是问题)
其实之所以会产生&a和*b的值应该是一样的误解,在于对int b = &a;这句话的理解不到位。 这句是做了两件事,定义和赋值(int b; b=&a;)。 第一步:定义,int b和int b两种写法都是可以的,意思是定义了一个指针变量b; 第二步:赋值,b=&a;这里其实是取了a的地址(&是取地址的操作),赋值给b,那么b的值就是a的地址。 printf("%d\n",b); 这个里面的b是将b的内容作为地址,通过这个地址再去取对应的值。跟int *b是不同的,不能混淆。
地址
关于结构体做参数传递(重点问题)
重点参考,解惑
|