C语言学习笔记<六>

指针变量可以作为函数返回值使用,只能把全局变量的地址,静态局部变量的地址或者通过参数得到的地址当作返回值使用,普通局部变量的地址绝对不可以当返回值使用。

字符串是由内存中一组连续的字符变量构成的。C语言程序中使用第一个字符地地址表示整个字符串。'\0'是字符串的结尾字符,字的位置决定了一个字符串中有效字符变量的个数。这个字符在ASCII表中对应数字0

字面值是程序中表示字符串的一种写法,用双引号表示。字面值表示的字符串不可以被修改。多个相同内容的字面值在程序运行时都是同一个。多个连续的字符串字面值在编译时全被合成一个。

字符数组也可以表示字符串,它存储在栈中。它可以被修改,可以使用多种方式进行初始化。

fgets函数可以用来从键盘读取字符串,不会出现字符数组溢出问题。

strlen函数可以计算字符串中有效字符的个数
strcat函数可以把两个字符串合并,可能造成数组溢出。使用strncat函数可以避免溢出。
strcpy函数可以把一个字符串赋值成另一个字符串。使用strncpy函数可以避免溢出。
strcmp 函数可以比较两个字符串的大小关系,strncmp的函数比较两个字符串中前面几个字符的大小。

预处理指令#define 可以用于实现宏定义,宏可以用来当作数字的名称。
可以在gcc 命令行中使用 -D选项来定义宏。

宏也可以带参数,宏的参数都既是输入参数也是输出参数

宏的所有参数在使用的时候要用小括号包括起来。
宏的计算结果要用小括号包括起来
不要使用自增自减的计算结果作为宏的参数使用。

#操作符可以把宏的某个参数变成字符串字面值
##操作符可以把宏的某个参数代表的标示符和其它内容合并成为一个新的标示符。

编译器内部提供了一些预定义的宏,在编译的时候编译器把他们替换成正确的内容。

 1 /*==============================================
 2  *名称:宏练习                 功能:无
 3  *日期:2013-05-14             by:ant
 4  *备注:
 5  *============================================ */
 6 #include<stdio.h>
 7 #define  PI     3.14f
 8 #define CIRCLE(r)   2 * PI *r 
 9 #define AREA(r)   PI * r * r
10 int main()
11 {
12     int radius = 0;
13     printf("请输入半径:");
14     scanf("%d",&radius);
15     printf("圆的周长是%g\n",2 * 3.14f * radius);
16     printf("圆的周长是%g\n",2 * PI * radius);
17     printf("圆的周长是%g\n",CIRCLE(radius));
18     printf("圆的面积是%g\n",AREA(radius));
19     return 0;
20 }
 1 /*===========================================
 2  *名称:宏练习1                功能:无
 3  *日期:2013-05-14             by:ant
 4  *备注:
 5  *========================================== */
 6 /*
 7 #include<stdio.h>
 8 void neg(int value)
 9 {
10     valur = 0 - value;
11 
12 }
13 int main()
14 {
15     int value = 4;
16     neg(value);
17 
18     printf("value是%d\n",);
19  }
20 */
21 //编写一个宏计算两人个数字中的最大数。
22 /*
23 #include<stdio.h>
24 #define MAX(a,b)   (a > b) ?a:b
25 
26 int main()
27 {
28     int c=2,y=3;
29    // MAX(c,y);
30     printf("最大值是%d",MAX(c,y));
31 }
32 */
33 #include<stdio.h>
34 #define  SECPH       (60 * 60)
35 #define NEG(n)        0 - (n)
36 #define SQUARE(n)    ((n)*(n))
37 //如果用 #define SECPH 60 * 60 会因为计算顺序而被错误执行
38 int main()
39 {
40     printf("小时数是%d\n",7200 / SECPH);
41     printf("NEG(3)是%d\n",NEG(3));
42     printf("SQUARE(4)是%d\n",SQUARE(4));
43     return 0;
44 }
 1 /*============================================
 2  *名称:                       功能:无
 3  *日期:2013-05-14             by:ant
 4  *备注:
 5  *============================================ */
 6 #include<stdio.h>
 7 #include<string.h>
 8 int main()
 9 {
10     char str[20] = "abc";
11     printf("长度是%d\n",strlen("abcdef"));
12     printf("合并后是%s\n",strcat(str,"xyz"));
13     printf("赋值后字符串是%s\n",strcpy(str,"uvw"));
14     strcmp("比较结果是%d\n",strcmp("abc","abd"));
15     return 0;
16 }
/*============================================
 *名称:字符串练习1            功能:无
 *日期:2013-05-14             by:ant
 *备注:
 *============================================ */
#include<stdio.h>
int main()
{
    char *p_str = "abcdef";
    char str[] = "abc";
   // *p_str = 'x'; 字符串字面值不可以修改
   printf("%p\n","abcdef");
   printf("p_str是%p\n",p_str);
   printf("%s\n","abc""xyz");
   printf("%s\n",str);
   printf("字符变量个数是%d\n",sizeof(str) / sizeof(str[0]));
   str[0] = 'y';
   str[1] = 0;
   printf("%s\n",str);
   return 0;
}
原文地址:https://www.cnblogs.com/fanghui/p/3099097.html