C语言基础(类型、数组、指针、传参)
现状态
- 熟悉Java、C#语言编程
- 了解C基本语法
- 想要深入学习C、C++
类型
- 六大基本类型:
int, long, short, doube, float, char
- 空类型:
void
- 数组类型:
[]
- 指针类型:
*
类型长度
类型长度即一个类型变量在内存中所占的字节数,可通过sizeof()获取;
例:
int i = 1;
printf("%d",sizeof(i));
//printf("%d",sizeof(int));
输出结果为4,代表一个int类型的变量在内存中占4个字节。
(在此可以很方便的理解int的最大值,4字节最大值为0xFFFFFFFF)
注:sizeof不是函数,是一个操作符。
数组
1. 如何声明一个数组?例:
int arr[] = {1,2,3,4,5,6,7,8,9};
2. 如何获取一个数组的长度?
由sizeof可得到数组的总字节长度和单个成员的长度,所以得:
int length = sizeof(arr[0])/sizeof(arr);
指针
1. 指针是什么?
答:指向一个内存地址,此地址为类型变量的第一个字节地址。
例:
int *handle = arr;
printf("0x%x \n",handle);
输出为 0x78d1c3d0 ,此处0x78d1c3d0即为arr在内存中的首地址,所以此时handle[0] == arr[0]…
注:printf中%d表示一个整数,%x表示一个十六进制数。
2. 指针有长度吗?长度是多少?
答:指针也是一种类型,所以也有长度,长度在各系统平台不一致。
例:
printf("%d",sizeof(handle));
输出为8。
注:在32位系统环境下指针的长度应该为4,我这里是64位Ubuntu,Windows应该同理。
传参
1. 在传输参数的时候,传输的是数值还是指针?
答:指针,例中举出一个有力证明。
例1:
#include "stdio.h";
void main(){
int arr[] = {0,2,3,4,5,6};
printf("0x%x \n",arr);
init(arr);
}
void init(int arg[]){
printf("0x%x \n",arg);
}
例2:
#include "stdio.h";
void main(){
int arr[] = {0,2,3,4,5,6};
printf("0x%x \n",arr);
init(arr);
}
void init(int Addr){
printf("0x%x \n",Addr);
}
输出结果为
0x984f3020
0x984f3020
0xcc776550
0xcc776550
由此可见,参数传递的是指针(即内存地址),而并非数值。
总结
C、C++与Java、C#之类的解释语言不同,编程时需要更加注意内存中的状态,便能更加方便的理解其中各种特性。