码迷,mamicode.com
首页 > 编程语言 > 详细

C语言--指针

时间:2015-01-21 23:46:51      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

一、指针

1.指针声明格式

 1> 格式:变量类型 *变量名。举例:char *p,定义了一个指针变量p,只能存储地址

 * 记住*不是指针变量名,只是指针的一个标志

 2> 作用:指针就一个作用,存储地址,并且根据地址值访问对应的存储空间

 3> 例子

技术分享
1 int main()
2 {
3     int a = 90;
4     int *p ;
5     p = &a; 
6     return 0;
7 }    
指针代码

 * 代码在内存中的表示

技术分享

 * 注意点:① int *p只能指向int类型的数据 ②指针变量为经过初始化,不要拿来间接访问其    他存储空间 ③ 不允许这样写:*p = &a ,*p代表访问指针p所指向的存储空间 ④ 定义变量  是的*仅仅是一个象征,没有其他特殊含义

二、指向指针的指针

1.举例

  char a=‘A‘;

  char *p = &a; // 指向char类型存储空间的指针

  char **pp = &p; // 指向指针的指针

  char ***ppp = &pp; // 三级指针(不经常用)

 

2.指针应用

 1> 实现调用一个函数,得到多个返回值

技术分享
 1 #include <stdio.h>
 2 
 3 int sumAndMinus(int num1, int num2, int *num3)
 4 {
 5     *num3 = num1 - num2;
 6     return num1 + num2;
 7 }
 8 
 9 
10 int main()
11 {
12     int a = 12;
13     int b = 8;
14     int minus;
15     int sum = sumAndMinus( a, b, &minus);
16     return 0;
17 }  
多返回值

3.指针占用内存

 * 指针占用内存与具体编译器有关,在Xcode中任何类型指针占用8个字节

三、指针与数组

1.数组的遍历

 //利用下标进行遍历

 int nums[3] = {1,2,3,}

 for(int i = 0;i < 3; i++)

  {

   printf("%d\n", nums[i]);

  }

2.利用指针对数组进行遍历

 int nums[3] = {1,2,3,};

 int *p = &nums ;

 //指针p指向数组的首元素地址;

 //(p+1)指向 nums[1];

 for(int i = 0;i < 3; i++)

  {

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

   printf("%d\n", p[i ]);

  }

四、指针与字符串、指针数组

1.字符数组与字符串的比较

 char c1[] = "name";

 //上面这行代码表示的是字符数组,所表示的是字符串变量

 char *c2 = "name";

 //上面这行代码。指针变量c2指向的是字符串首字母。它表所表示的是字符串常量

 //两行代码的不同,也与数据在内存中的存储有关

 char *c3 = "name";

 //注意:c2与c3所便是的是同一个地址

2.定义字符串的两种方式

 1> 利用数组

 char c[] = "name";

 //特点:字符串里面的字符是可以修改的

 //使用场合:字符串的内容需要经常修改

 2> 利用指针

 char *c = "name";

 //特点:字符串其实是一个常量字符串,里面的字符是不能修改的

 //使用场合:字符串的内容不需要修改,而且这个字符串经常使用

3.指针数组

 1> 指针数组的定义

 char *name[3] = {"jack", "rose", "tom"};

 2> 字符串的输入

 //新建一个字符数组,用来保存用户输入的字符串

 char name[20];

 // 数组名就表示数组首元素的地址

 scanf("%s", name);

五、指向函数的指针与返回指针的函数

 1.返回指针的函数

 char *test()

 {

  return  "name";

 }

 int main()

  {

   char *p = test();

   return 0;

  }

2.指向函数的指针

void test()

{

  printf("调用了test函数");

}

int main()

{

  //(*p)是固定写法,代表指针变量p将来肯定是指向函数

  //左边的void :指针变量P指向的函数没有返回值

  //右边的():指针变量p指向的函数没有形参

  void (*p)();

  //函数名就是函数地址

  p = test;

  //函数调用的三 种方式

  (*p)();// 第一种方式:直接调用

  test();// 第二种方式:利用指针调用

  p();//第三种方式:利用指针调用

  return 0;

}

 

 

技术分享
技术分享

C语言--指针

标签:

原文地址:http://www.cnblogs.com/smqh/p/4240214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!