C和指针

Posted embeddedking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C和指针相关的知识,希望对你有一定的参考价值。

一. 快速上手

1. 逻辑上删除一段程序:

#if 0

  statements

#endif

2. printf函数:%d十进制整型值、%o八进制、%x十六进制、%g浮点值、%c字符、%s字符串

 scanf函数:%d整型值、%ld长整型、%f浮点数、%lf双精度、%c字符、%s字符串

3. char *strchr(char* dest, char src) => 返回src字符在dest字符串中第一次出现的位置

 char *strstr(char* dest, char* src) => 返回src字符串在dest字符串中第一次出现的位置

 

二. 基本概念

1. cc -c test.c main.c将源文件test.c、main.c编译生成目标文件test.o和main.o;  cc test.o main.o链接几个目标文件

2. int ch; while((ch = getchar()) != EOF){ putchar(ch) };

 

三. 数据

1. 可以把字符串常量赋值给一个“指向字符的指针”,但是不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。

2. char *message = "Hello World";(把message声明为一个指向字符的指针,并用字符串常量中的第一个字符的地址作为其值初始化)相当于char *message; message = "Hello World";

3. typedef出现在定义前面 char *ptr_to_char; typedef char *ptr_to_char; ptr_to_char a;将a声明为指向字符的指针

 

四. 语句

1. while( scanf("%f", &value) == 1 && value >= 0){}

2. switch(expression) {case constant-expression:} //expression的结果必须是整型值,constant-expression必须是常量表达式

3. switch(ch)

{

  case ‘ ‘: line += 1;

      /* FALL THRU */fall through表明ch贯穿所有case,当满足 时除了执行line+=1,下面的words+=1和chars+=1都会执行

  case ‘ ‘:

  case ‘‘: words += 1;

      /* FALL THRU */

  default: chars +=1;

}

4. c不具备布尔类型,用整型表达式代替

5. c不具备任何I/O输入/输出语句,c也不具备任何异常处理语句,这些都是通过调用库函数实现的。

 

五. 操作符和表达式

1. 将指定位数置1:value |= (1 << bit_number);将指定位数置0:value &= (~(1 << bit_number));判断指定位数是否为0:value &= (1 << bit_value)

2. 逗号表达式的值为整个表达式最右边的值。if(b-10, c+4, d>0)//从左往右依次执行,但整个表达式的值为d>0

3. 下标引用:array[ 下标 ] 等价于 *(array + (下标))

4. lexp代表左值,左值代表一个位置,rexp代表右值,右值代表一个值,在左值的地方不能使用右值,在右值的地方可以使用左值

5. 大写转小写:#include <ctype.h> tolower(ch);

 

六. 指针

1. 硬件通过地址访问内存位置,编译器帮我们实现通过变量访问内存位置

2. 值的类型并非值本身所固有的特性,而取决于它的使用方式

3. 变量的值就是分配给该变量的内存位置所存储的值,即使是指针变量也不例外

4. 段违例:segmentation violation;内存错误:memory fault

5. 在特定数组中查找某个特定值得函数:返回状态值表示是否找到,如果找到,再返回指向该值得指针

6. 在对指针进行解引用操作/间接访问之前,必须确保指针不是NULL指针

7. *(int *)100 = 25;将整型强制转换为指向整型的指针,用于访问设备控制器接口

8. *p+1表示*p的值加1;*(p+1)表示p指向的地址加1后取值

9. char ch;char *cp = &ch; *cp++//①++操作符产生cp的拷贝②++操作符再增加cp的值③最后在cp的拷贝上执行间接访问操作。

 当表达式*cp++作为左值时表示ch的内存位置,作为右值时表示ch的值

2. 431 109

 

以上是关于C和指针的主要内容,如果未能解决你的问题,请参考以下文章

C和C指针小记(十七)-使用结构和指针

C语言中“指针”和“指针变量”的区别是啥??

c指针

C语言指针/引用/取值

C语言用指针求数组和

指针常量和常量指针