一个通常两个例外
char arr[10];
arr通常表示指向首元素的指针,对于一维数组等价于&arr[0]
例外: &arr是表示指向整个数组的指针
sizeof(arr) 整个数组所占内存的大小
arr +1 === &arr[1] 偏移了一个对象大小
&arr + 1 需要偏移一个数组大小
(int)arr ----> arr对应的数据就只是一个普通变量,不具有指针的特性
(int)arr +1 ----> arr对应的数据+数字1 而已
(int *)地址, 就表示这个地址作为基地址,往上取一个int类型大小的空间
--------------------------------------------------------——————————
scanf(“%c”, )或者(“%s”,) 从键盘中得到的都是字符 ,键盘输入1得到的是字符‘1’,存进内存的是49这个值
scanf(“%d”, )或者(“%x”,) 希望从键盘中得到数字 ,键盘输入1得到的是数字1,存进内存的是1
打印的时候也同理,按你的需求来显示
%c 就会把49这个编号对应字符给显示出来
%d 直接显示编号或者数值
并没有说char类型变量就一定要用%c
--------------------------------------------------------——————————
#include <math.h>
sqrt()
编译时候要链接一个动态库
gcc -o sqrt sqrt.c -lm
---------------------------------------------————--
google:
如果遇到大数组,要考虑适当优化
1:建一个比较数组,记录该字符是否出现过
2:对于第一次出现的字符,在比较数组中记录,
并顺次写入到输出数组中
3:注意判断的结束条件
-------------------------------------------------------
函数:
实现具体功能,代码模块化
int main(void)
【存储类型】 返回类型 函数名 (形参)
auto int * a_1 (int a, char b )
extern float _a (void) 不传参
static(静态) double (int argc, char **argv)
char
bool
void(无返回)
黑盒子
不需要了解里面的具体操作的,
但是要知道这个函数有什么功能
/* 函数是用来去除重复字符 */
/
* 判断是否是素数,是则返回1,否则返回0 */
编写一次就能多次调用,编码简单,节约内存
函数的使用:
1;在调用函数之前要写上函数的声明
如int my_strlen(char str[]) ; (注意 有分号;的!!!)
如果是系统级别的函数,是在系统头文件里面的
2: 函数定义的时候,类型要和声明一致
int my_strlen(char str[])
{
}
字符串相关函数 \0表示到字符串尾了
strlen(const char * arr) 得到字符串中有效元素的个数
char arr[10] = "abcde";
strlen(arr) 得到的值是5
sizeof(arr) 得到的是10
char arr[ ] = "abcde";
strlen(arr) 得到的值是?
sizeof(arr) 得到的是?
char *strcat(char *dest, const ch
ar *src);
char *strncat(char *dest, const char *src, size_t n);
strcat(str1, str2) //可能会造成str1越界,超出预定范围
strncat(str1,str2, num)// 利用num可以保证安全
要注意dest目标数组的长度是否足够
strcmp 比较字符串
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
两个字符串相同的时候,返回值为零
if(strcmp(str,"hello") == 0) // 判断str是否为hello
strcpy 把源字符串复制给目标字符串
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);
给字符串赋值:
char name[12];
1:scanf("%s", name);
2:strcpy(name, "zhangsan");
strstr 在大字符串中查小字符串
char *strstr(const char *haystack, const char *needle);
strstr(arr, "he")
如果没有匹配的小字符串,返回值是NULL
如果有匹配的小字符串,返回值是该小串到‘\0’的内容
if(strstr(name ,"mp3") !=0) 判断是否有mp3字样
strtok
利用分割符号以及字符指针,把字符串给分割开
char *strtok(char *str, const char *delim);
char *sub1, *save;
for(sub1 = arr1; ;sub1=NULL)
{
save = strtok(sub1, " :");
if(save == NULL)
break;
printf("%s \n", save );
}
zhangsan 18 165 o f
strtok & strcpy
-
------------------------------------------------
函数传参(形参、实参、一维数组)
赋值
(形参和实参的类型是一样的,但是所在的地址,所表达的意思是不一样的)
实参的值,在调用函数的时候,赋值给了形参
void func(int x); (调用的时候x作为形参)
void func_2(int *p)
int main(void)
{
int i = 99; (i是实参)
func(i); ---> func x = 99 赋值
func_2( &i); ---> func_2 p = &i 赋值
}
思考: 如何编写一个函数,实现两个数的值的交换
不管传的是值还是一个地址,都是给被调用函数的形参赋值
strcmp比较数组所以我们要理解的是怎么去做具体的操作
思考: 如何在另一个函数中去打印本函数中一个数组的内容?
注意: 数组名赋值给形参的时候,其实是作为指针也就是元素首地址传输的
也就是说, 在被调用函数里面,
关于数组长度的判断都是不可信的,
但是只要和数组长度无关,操作没有什么区别
如果在被调用函数中确实需要用到数组的长度,需要另外传变量
-
-----------------------------------------------------------------------------
函数自实现
自写一个函数,实现strlen ;
实现 strcpy
思考: strcat / strtok
-----------------------------------------------------------------------------
作业
:
1:好好复习笔记和代码都过一次,完成102\C语言基础\004\point.doc
2:编写一个函数,清除一个字符串中的空格符号,并将该字符串输出
(如果不允许新建字符串呢?)
如arr 有“a b” , 最后变成“ab”
3: 一个有N个元素的整型数组,
求该数组的各个子数组(元素连续的,至少是一个元素)中,子数组中元素之和的最大值是多少?
如a[6] = { -2,5,3,-6,4,-8}
子数组之和最大的是 {5,3} 为8
4:完成昨天的gooogleee题目
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论