- 基本数据类型
int %d;
short %d;
long %l;
float %f;
double %lf;
char %c; //声明时用”单引号;声明数组时使用“”
#x 十六进制
#o 八进制
#s 字符串
- 计算所占字节数
sizeof (数据类型)
查找头文件的实现
vs 安装目录的VC\crt\src文件中查找
- 指针
定义:存储的变量的内存地址
int a = 10;
int *p = &a;//p为a在内存空间的地址
通过指针可以修改a的值
*p = 15;//此时a 的值变为15
c语言中通过指针传递改变变量的值
void change(int *a){
*a = 15;
}
void main(){
int a = 10;
change(&a);
}
指针的运算
//实质是 p+(-)sizeof(数据类型)
char *p_c;//0x2345
int *p_i;//0x1234
p_c+=2//p_c = 0x2345+2*1
p_i--//p_i=0x1234 - 4
//输出数组
int a[] = {1,2,3,4};
/*
a , &a, &a[0] 三者的效果相同
a+i 等价于 &a[i];*(a+i) = a[i]
*/
int *p = a;
int i = 0;
int len = sizeof(a)/sizeof(int);
for(;i<len;i++){
printf("%d\n",*p++);
}
空指针
int *p = NULL;//默认值为0
多级指针
int a = 5;
int *p = &a;
int **l = &p;
**l = 9;
printf("%d\n",a);//输出9
函数指针
int add(int a,int b){
return a+b;
}
int main(void) {
int (*func_p)(int ,int );
func_p = &add;
int a = (*func_p)(1,4);
printf("%d\n",a);
return EXIT_SUCCESS;
}
int add(int a,int b){
return a+b;
}
int divs(int a,int b){
return a-b;
}
int change_s(int (*func_p)(int ,int ),int m,int n){
return (*func_p)(m,n);
}
int main(void) {
printf("%d\n",change_s(add,1,2));
printf("%d\n",change_s(divs,7,9));
return EXIT_SUCCESS;
}
二维数组及指针
int main(){
int a[2][3] = {95,82,56,17,29,30};
printf("%#x,%#x,%#x,%d\n",a,&a,*a,**a);
printf("%d,%d,%d,%d\n", sizeof(*a), sizeof(*&a), sizeof(**a));
//a是一个行指针,指向一个有三个元素的数组,12
//&a是一个指向二维数组的指针,当前二维 数组6个元素,24
//*a 是一个指向int类型数据的指针(a[0][0]),4
printf("%d\n", **a);
//a是一个行指针,是数组第一行的指针,a+1第二行的指针,以此类推
printf("%#x,%#x\n",a,a+1);
//*a是数组的第一行第一个元素的指针,*a+1是数组第一行第二个元素的指针
printf("%#x,%#x\n",*a,*a+1);
//*(a+1)是数组的第二(1)行第一(0)个元素的指针
//注意:不一定是正常逻辑
printf("%#x,%#x\n",*(a+1),*(a+1)+1);
//取数组的第1(二)行,第2(三)个元素
printf("%d\n",a[1][2]);
printf("%d\n",*(*(a+1)+2));
//总结:
//a[i][j] 等价于 *(*(a+i)+j)
//&a[i][j] 等价于 (*(a+i)+j)
return EXIT_SUCCESS;
}
- 生成随机数
int a = rand()%100;
printf("%d\n",a);