当前位置:天才代写 > tutorial > C语言/C++ 教程 > 学点C语言(20):数据范例 – 指针

学点C语言(20):数据范例 – 指针

2017-11-03 08:00 星期五 所属: C语言/C++ 教程 浏览:866

副标题#e#

1. 通过 &变量 可以获取变量地点:

#include <stdio.h>

int main(void)
{
  int num = 10;

  printf("变量值: %d\n",num);
  printf("变量址: %d\n",&num);

  getchar();
  return 0;
}

2. 暗示变量地点的变量就是指针:

#include <stdio.h>

int main(void)
{
  int num = 10;
  int *p = &num;

  printf("%d,%p\n",num,p);

  getchar();
  return 0;
}

3. *指针 就如同变量自己是一样的:

#include <stdio.h>

int main(void)
{
  int num = 10;
  int *p = &num;

  printf("%d,%p,%d\n",num,p,*p);

  *p = 11;
  printf("%d,%p,%d\n",num,p,*p);

  (*p)++;
  printf("%d,%p,%d\n",num,p,*p);

  num = 99;
  printf("%d,%p,%d\n",num,p,*p);

  getchar();
  return 0;
}

4. 声明指针时要留意初始化,没有初始化的指针是危险的:

#include <stdio.h>

int main(void)
{
  int n1 = 11;
  int n2 = 22;
  int *p = NULL; /* 初始化为空 */

  p = &n1;
  printf("%d,%p,%d\n",n1,p,*p);

  p = &n2;
  printf("%d,%p,%d\n",n2,p,*p);

  getchar();
  return 0;
}


#p#副标题#e#

5. 为什么没有初始化的指针是危险的:

#include <stdio.h>

int main(void)
{
  int *p;

   // 上面的指针p没有初始化话,但它也有个垃圾地点
  printf("%p\n",p);

   // 此时假如给它赋值,谁知道会包围了什么?
  //*p = 100; /* 不要执行这个 */

  getchar();
  return 0;
}

6. 指向常量的指针: 不能通过指针修改它指向的值,但该值可以通过其变量修改

#include <stdio.h>

int main(void)
{
  int n1 = 111;
  int n2 = 222;
  const int *p = &n1; /* 留意 const 的利用 */

  printf("%d,%p,%d\n",n1,p,*p);

  n1 = 333;
  //*p = 333; /* 不行以这样,因为此刻的指针是常量 */
  printf("%d,%p,%d\n",n1,p,*p);

  p = &n2;  /* 可以改变指针的指向 */
  printf("%d,%p,%d\n",n2,p,*p);

  getchar();
  return 0;
}

7. 常量指针: 锁定指针的指向

#include <stdio.h>

int main(void)
{
  int n1 = 111;
  int n2 = 222;
  int *const p = &n1; /* 留意 const 的利用 */

  printf("%d,%p,%d\n",n1,p,*p);

  n1 = 333;
  //*p = 333; /* 不行以这样,因为此刻的指针是常量 */
  printf("%d,%p,%d\n",n1,p,*p);

//  p = &n2;  /* 此刻不行以改变指针的指向了 */
//  printf("%d,%p,%d\n",n2,p,*p);

  getchar();
  return 0;
}

#p#副标题#e#

8. 指针是有范例的:

#include <stdio.h>

int main(void)
{
  long  n  = 100L;
  float f  = 1.5f;
  double d  = 3.14159265;

  long  *p1  = &n;
  float *p2  = &f;
  double *p3  = &d;

  printf("%ld\n",*p1);
  printf("%g\n",*p2);
  printf("%.8f\n",*p3);

  getchar();
  return 0;
}

9. 令人疑惑的指针界说:

到底应该奈何写:

int *p;

int * p;

int* p;

因为 C 语言忽略空缺,这些都是对的,但下面的例子会说明哪个更好:

#include <stdio.h>

int main(void)
{
  int n1,n2,*p; /* 界说了两个整数(n1、n2),和一个整数指针(p) */

  n1 = 111;
  n2 = 222;

  p = &n1;
  printf("%d,%p\n",*p,p);

  p = &n2;
  printf("%d,%p\n",*p,p);

  getchar();
  return 0;
}

返回“学点C语言 – 目次”

 

    关键字:

天才代写-代写联系方式