11.25 C语言学习

使用strcat、strcpy,strcmp,strlen,strlur,strupr函数时,需要包含#include的头文件

strcat 连接字符串
strcpy 复制字符串
char c1[10] = “abc”;
char c2[10] = “xyz”;
strcpy(c1,c2)复制后:c1存放:xyz\0

strcmp 比较字符串【比较的不是大小而是每个字符的ACSII码的值】
x = strcmp(c1,c2)
x > 0; c1 > c2
x < 0; c1 < c2
x = 0; c1 = c2

strlen 字符串长度
不包含‘\0’,
eg
char c[10] = “happy”;
strlen©;//长度为5
sizeof()运算符,包含‘\0’,测字节数;
sizeof© ;//值为10

二维数组可放多个字串,列的长度应按最长的计算。
如果字符串赋值给了一个一维数组,一维数组的名字代表首地址。
如果定义时没有赋值内容,以下是错误的。
char a[10]1, a[10] = “char”;
2, a = “char”;
3, a[9] = “A”【正确的是a[9] = ‘A’】

输入
scanf("%s",c);\一次只能输入不带空格的字符串
需要输入带空格的:gets()
scanf("%s",c);
how are you?
c中内存存储:how\0
scanf("%s%s%s",c1,c2,c3)
how are you?
c1:how\0
c2:are\0
c3:you!\0

输出。
一个个输出,%c,就像普通数组一样用循环输出。
整体输出,%s, printf("%s",c);//遇到第一个’\0’结束输出。
puts();输出字符串时会把末尾的‘\0’转换成‘\n’
printf(“%s”,c[5]);从第六个开始输出。

变量指针:地址
指针变量:存放地址的变量
*号没有传递性!

指针变量做函数参数。
int x(int *p)
{}
一般来说是形参决定实参的类型。

一维数组的地址和指针
数组的指针:数组的起始地址
元素的指针:数组元素的起始地址
int p = &a[0];
表示方法:
1、下标法:a[i]
2、指针法:(a+i) 或者 *(p+i)

 *p++与 *(p++)等价,先引用,后加一;

(*p)++:指向的元素值加一

指向数组的两个指针相减,得到的是指针的偏移量

二维数组地址

a 首行地址
a[0], *(a+0), *a 0行0列,列地址
a+1,&a[1] 第一行首地址,行地址
a[], *(a+1) 第一行第0列的元素地址
a[1]+2, *(a+1)+2, &a[1][2] 第一行第1列的元素地址
(a[1]+2), ((a+1)+2), a[1][2] 第一行第2列的元素的值
&
, *[];互相抵消

指向指针的指针
printf(“%o\n”,*p);//输出地址
printf("%s\n",*p);//输出字符串

二维数组元素地址计算表:
11.25 C语言学习_第1张图片

动态数组(不用的时候记得释放,否则会出现内存泄漏)

malloc()函数
void *malloc(unsigned int size) //以字节为单位
若未能成功执行,则返回空指针(NULL)
eg。long *p;
p = (long *)malloc(8);//返回的是void型指针,需要进行强制转换才能用。

calloc()函数
void *calloc(unsigned int n, size)//size是固定的
分配n个长度为size的连续空间,相当于一维数组。
eg:
long *p;
p = (long *)calloc(5,4);

free()释放空间函数
eg:
long *p;
p = (long *)calloc(5,4);
free(p);

realloc()函数
扩大或缩小原储存空间
eg:
long *p;
p = (long *)calloc(5,4);
p = realloc(p,10);
free(p);

你可能感兴趣的:(笔记,c语言)