C语言结构体定义方式
字符串操作
- char str1[] = "runoob";
- char str2[] = "abc";
- // 字符串长度
- printf("%d \n",strlen(str1));
- // 拼接字符串
- printf("%s \n",strcat(str1,str2));
- // 替换字符串
- printf("%s \n",strcpy(str1,str2));
typedef define 区别
define 相当于java 中的 static final
#define A 3.14
#define B abc123 注意后面没有分号
//
解释malloc 分配堆内存
malloc(int 整数) // 分配内存空间 // 函数解读 可以动态配置内存大小 单位是字节 // 比如下面的代码表示向操作系统分配了8个字节的内存空间 2*4 // 函数返回值是连续空间的第一个低地址字节的编号 void * // 所以用个指针变量来存放申请到的内存地址 分配失败返回NULL
C语言和Java中定义一维数组区别
C语言中定义一维数组 // 变量名在前 [] 在后 char name[31]; Java中定义一维数组 2 int array[]={}; int[] array
可以用指针来操作数组 int array[3]={1,2,3}; int * p = array; printf("数组第一个元素=%d \n",*p);
模式理解
高字节-高地址 低字节-低地址 小端模式 大端模式 相反
const 关键字 理解
如果const 后面是一个类型,则跳过最近的原子类型,修饰后面的数据。 (原子类型是不可再分割的类型,如int, short , char,以及typedef包装后的类型) const 常数 常量 // 类似于Java中的final int const *point const int *point; int * const point;
指针博客
www.cnblogs.com/lulipro/p/7… www.cnblogs.com/tongye/p/96…
指针的数组 数组指针
数组的指针:是一个指针,什么样的指针呢?指向数组的指针。 指针的数组:是一个数组,什么样的数组呢?装着指针的数组。
指针数组 数组指针 demo
#include "stdafx.h" int main() { //一维数组 int a[5] = { 1, 2, 3, 4, 5 }; //步长为5的数组指针,即数组里有5个元素 int (p)[5]; //把数组a的地址赋给p,则p为数组a的地址,则p表示数组a本身 p = &a;
//%p输出地址, %d输出十进制
//\n回车
//在C中,在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址,它的类型取决于数组元素的类型。
printf("%p\n", a); //输出数组名,一般用数组的首元素地址来标识一个数组,则输出数组首元素地址
printf("%p\n", p); //根据上面,p为数组a的地址,输出数组a的地址
printf("%p\n", *p); //*p表示数组a本身,一般用数组的首元素地址来标识一个数组
printf("%p\n", &a[0]); //a[0]的地址
printf("%p\n", &a[1]); //a[1]的地址
printf("%p\n", p[0]); //数组首元素的地址
printf("%d\n", **p); //*p为数组a本身,即为数组a首元素地址,则*(*p)为值,当*p为数组首元素地址时,**p表示首元素的值1
printf("%d\n", *p[0]); //根据优先级,p[0] 表示首元素地址,则*p[0]表示首元素本身,即首元素的值1
printf("%d\n", *p[1]); //为一个绝对值很大的负数,不表示a[1]...表示什么我还不知道
//将二维数组赋给指针
int b[3][4];
int(*pp)[4]; //定义一个数组指针,指向含4个元素的一维数组
pp = b; //将该二维数组的首地址赋给pp,也就是b[0]或&b[0],二维数组中pp=b和pp=&b[0]是等价的
pp++; //pp=pp+1,该语句执行过后pp的指向从行b[0][]变为了行b[1][],pp=&b[1]
int k;
return 0;
}