C语言

254 阅读3分钟

C语言结构体定义方式

bbbbbbb.png

字符串操作

  • 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;

}