美文网首页
C语言指针强化

C语言指针强化

作者: Lazy_Caaat | 来源:发表于2018-12-11 17:56 被阅读0次
C语言发展史

UNIX最早是由汇编写的,之后改成B语言,随后改进成NB(new B),NB最后就改称为C语言了。
一开始由于运行环境的不同程序运行也有差异,经过一番纷争,终于在1989年通过了C语言的标准规范,就是我们常说的ANSI C,目前大多数C语言程序都是基于此标准。ANSI C后来被ISO采用,目前真正的标注应该是ISO-C标准。

C语言精神
  1. 请信任程序员(Trust the programmer)
  2. 不要阻止程序员去做需要做的工作(Don't prevent the programmer from doing what needs to be done)
    3.保持语言的小巧和简单(Keep the language small and simple)
  3. 为每一种操作只提供一种方式(Provide only way to do an operation)
  4. 就算不能保证可移植性,也要追求运行效率(Make it fast , even if it is not guaranteed to be portable)
指针类型

同int类型、char类型等类型一样,指针类型也是一个类型。
不同的是,指针类型是通过其他类型派生出来的类型,例如指向int的指针类型、指向char的指针类型....

解引用*
int a = 5;
int *p;
p=&a;

&取址符,可以获得变量在内存中的地址的值。
*运算符,等同于它指向的变量。
其中p和a代表同一个事物,可以通过p来输出a的值,也可以通过*p对a进行赋值。

指针变量混乱的声明方式

通常C语言声明一个变量会这样写

int tmp;
类型  变量名;

指向int的指针通常这样写

int *tmp_p;

似乎声明了一个*tmp_p这么一个指针类型的变量,其实这里声明的变量是tmp_p,tmp_p的类型是“指向int的指针”。

因为有人觉得这种书写方式不方便理解,建议*应该靠左书写
int* tmp_p;
的确,这种书写方式更符合 “类型  变量名”的形式,但是如果遇到同时声明多变量的问题,就会出现与预期不符的问题了。

int* tmp_p,tmp2_p;      这样的话会声明出两个变量
tmp_p是指向int的指针
tmp2_p是int类型的变量
关于main函数

常见的有

int main(int argc, char *argv[])
或者不需要参数
int main (void)
或者单片机中不需要返回值
void main (void)

推荐前两种写法,单片机除外,若不是单片机代码,用第三种方式写的话理论上是错误的,会报缺少返回值的警告。

可以指向任何类型的指针类型 void *

取变量的值之前需要强制转换类型

int main(int argc, char *argv[]) {
    int hoge =5;
    void *hoge_p;
    hoge_p = &hoge;
    printf("%d\n",*(int *)hoge_p); 
    return 0;
}
指针运算
  • 对于指针的加减运算,严格来说只允许指针指向数组内的原酸,或者超过数组长度的下一个原酸,指针运算的结果也只允许指向数组内的元素,以及超过数组长度的下一个元素。
  • 在C语言中,对指针进行加1操作,地址的值会增加当前指针所指向数据类型的长度。
C语言传参问题

写一个交换数值的函数

void swap(int a, int b)
{
  int temp;
  temp=a;
  a=b;
  b=temp;
}
int x,y;
x=5;
y=10;
swap(x,y);  这里的交换是失败的,传递的参数是变量的副本,无法改变原变量的值。
printf ("x..%d,y..%d",x,y);
void swap(int *a,int *b)
{
  int temp;
  temp=*a;
  *a=*b;
  *b=temp;
}
swap(&a,&b);   通过指针来操作原来的变量,而不是原变量的副本。
早期的C语言一度只支持标量运算

在C语言中,枚举类型、字符型和各种整数的表示形式统一叫做标量类型。
当在C表达式中使用标量类型的值时,编译器就会自动将这些标识符转换为整数保存。
这种机制的作用是,在这些标量类型上执行的操作与整型上执行的操作完全一样。

相关文章

  • C语言指针强化

    C语言发展史 UNIX最早是由汇编写的,之后改成B语言,随后改进成NB(new B),NB最后就改称为C语言了。一...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C语言指针总结大学霸IT达人

    C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一。有了指针,C语言就可以抛开所有束...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 在Swift中使用C语言的指针

    在Swift中使用C语言的指针 在Swift中使用C语言的指针

  • 第十九天

    今天的课程由董老师为我们带来C语言的强化课程,就指针这一C语言最重要的部分进行讲解,主要是以概念的理解和简单的定义...

  • [Swift]结构体指针操作

    C语言的指针操作 在c语言中申明一个变量并通过指针修改该变量的值 a value is 2 c语言操作结构体指针操...

  • Go语言-指针

    Go语言中的指针不同于C语言,Go语言的指针使用方法要简单很多。当然和C语言从指针定义到指针的使用都有很大的不同。...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

网友评论

      本文标题:C语言指针强化

      本文链接:https://www.haomeiwen.com/subject/wqlshqtx.html