学习啦 > 学习英语 > 专业英语 > 计算机英语 > c中的用法

c中的用法

时间: 长思709 分享

c中的用法

  c中的用法的用法你知道吗?下面小编就跟你们详细介绍下c中的用法的用法,希望对你们有用。

  c中的用法的用法如下:

  C中*、&用法介绍

  例1、

  复制代码

  #include <stdio.h>

  int find(int *a);

  main()

  {

  int b = 1;

  int wait, test;

  test = find(&b);

  printf("内存地址为:%d",&test);

  scanf("%d", &wait);

  }

  int find(int *a)

  {

  return *a;

  }

  复制代码

  int b = 1; int test = find(&b); 这样调用时,实际上是进行了:int* a = &b,创建了一个新的指向b的整型指针a作为find函数范围内的局部变量。

  示例二

  函数声明:int find(int& a); 函数调用:int b = 1; int n = find(b);

  这样调用时,实际上是进行了:int& a = b,给变量b起了个别名a,也就是说a和b实际上代表的是同一个变量,调用期间没有创建任何新的变量。

  示例三

  函数声明:int find(int a); 函数调用:int b = 1; int n = find(b);

  这样调用时,实际上是进行了:int a = b,也就是普通的变量赋值操作,调用期间创建了在find函数范围内的局部变量a,它的值与b相同。

  &在用于计算时就是取变量地址,如int* a = &b,就是将整型变量b的地址取出,赋值给整型指针a,a中的内容就是b的地址,所以a指向b。

  *在用于计算时,就是取指针所指向的地址中的值,如int b = *a,就是将整型指针a指向的地址中存放的内容赋值给整型变量b。

  C语言中,&符号大家一定很熟悉吧,它除了可以作为按位运算“与”之外还有更常用的功能——取变量地址。

  复制代码

  #include <stdio.h>

  main()

  {

  int a = 0;

  int wait;

  int *p = &a;

  printf("The value is: %d\n", *p);

  scanf("%d", &wait);

  }

  复制代码

  上面代码中,指针p指向变量a的地址。在C/C++中,每个变量都有其相应的地址,通过在变量标识符前加&符号即可获得变量的地址。

  那么我们这么写可以吗?int *p = &0x01000;

  这显然不行。因为对于一个数值常量,它是没有地址的。而变量之所以有地址就是因为要有一个存储单元对变量进行标识(当然,变量也可以直接映射到某个寄存器)。

  我们再看下面的代码:

  复制代码

  #include "stdio.h"

  int main(void)

  {

  int a = 0; // &a = 0x0012ff60

  int *p = &*(int*)0x0012ff60;

  printf("The value is: %d\n", *p);

  return 0;

  }

  复制代码

  上面代码又是怎么回事呢?

  先前已经调查过变量a的地址——0x0012ff60,那么这里的指针p实际上也是指向变量a的地址。

  首先,将0x0012ff60作类型转换,转为int*,即经过(int*)0x0012ff60后,0x0012ff60转化成了一个地址,这时它与&a是等价的。(类似的: int a = (int)(((int *)0)+4); (int*)0 已经转化为一个地址了,+4 就是表示在刚才地址上加4,是地址的位移操作。)

  然后*(int*)0x0012ff60表示取变量a的内容。

  最后,&*(int*)0x0012ff60表示再脱去*(int*)0x0012ff60的解引用,相当于又变为(int*)&a。

  因此,这里的&与第一个例子中的&是不同的语义。这里的&不是取地址,因为一个*(int*)0x0012ff60不是变量,它是没有地址的。每一个变量标识符在编译期间,编译器会为它们创建一个符号表,其中存放着变量标识符相应的各种属性,如类型、地址标识等。地址标识在连接后即可确定逻辑地址值。简而言之,&作为取地址操作,当且仅当&后面跟着的是变量或函数标识符。所以这里的&表示脱去解引用。

  由此我们可以得出:&作为取地址操作时,其行为结果是在编译时就被确定的;而*,解引用操作(或取内容)操作,其行为结果只能在运行时才可被确定。

  再看下面的例子,加深印象:

  复制代码

  #include "stdio.h"

  int main(void)

  {

  int a = 0;

  int *p = &*&*&a;

  printf("The value is: %d\n", *p);

  return 0;

  }

  复制代码

  在C++中,&还可以表示引用,

  复制代码

  #include "iostream"

  using namespace std;

  int main(void)

  {

  int a = 0;

  int &r = a;

  cout << "The value is: " << r << endl;

  return 0;

  }

543013