C语言第十二回合:再谈指针

C语言第十二回合:再谈指针

【学习目标】

1.        指针数组

2.        数组指针

3.        函数指针

( 1 )指针数组

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身

决定。它是“储存指针的数组”的简称

如:

定义数组名为ptr,其中包含10个指向int类型的数据的指针

int *ptr[ 10];  //指针数组,int*修饰数组的内容

[程序]

#include <stdio.h>

void print_error( int n );

int main( void )
{
         inti;

         for(i= 0; i< 4; i++ )
         {
                   print_error(i );
         }

         putchar(10 ); //printf("\n" );

   return 0;
}

void print_error( int i )
{
         //定义包含4个指向int类型的数据指针的数组
         char*error[]= {
                          "cann`t openfile\n",
                                                "read error\n",
                                                "write error\n",
                                                "media failure\n"
                        };

   printf( "%s", error[ i ] );

         return;
}
 

( 2 )数组指针

数组指针:首先它是一个指针,它指向一个数组。在 3 2 位系统下永远是占 4 个字节,

至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。

格式:类型 ( *标识符 )[ ]

// int ( *p )[ 5 ];

#include <stdio.h>

void print( char ( *ptr )[ 10 ], int n ) //数组指针作为参数
{
         inti;

         for(i= 0; i< n; i++ )
         {
                   printf("%s\n", *( ptr+ i ) );
         }

         return;
}
int main( void )
{
         charname[ 3 ][ 10 ]= {
                                  "zhangsan",
                                                                            "lisi",
                                                                           "wangwu"
                               };
         print(name, 3 );  //打印

   return 0;
}

( 3 )函数指针

函数指针:就是指向函数的指针。

格式:类型 ( * 标识符 )( );

[程序 ]

#include <stdio.h>

//使用指针参数
//功能:两个数交换
void swap( int *a, int *b );

int main( void )
{
  int n= 10;
  int m= 20;
   //第一指针函数,返回类型void,f为函数指针
  void ( *f )(); 

   f=swap; //f指向swap。注意:类型必须匹配

  printf( "交换前:n= %d m=%d\n", n, m );

  if( n< m ) //如果n< m,就交换
   {
        f(&n, &m );
   }

  printf( "交换后:n= %d m= %d\n", n, m );

  return 0;
}

void swap( int *a, int *b )
{
         inttemp;

         temp=*a;
         *a=*b;
         *b=temp;

   return ;
}

运行结果:

交换前:n=10 m= 20

交换后:n=20 m= 10

【指尖的微笑】错误在所难免,希望得到大家的指正^-^

转载时保留原文的链接http://codingit.howbbs.com和http://blog.csdn.net/mirrorsbeyourself

时间: 2024-12-28 10:41:51

C语言第十二回合:再谈指针的相关文章

站在新语言平台上再谈&quot;组合&quot;与&quot;继承&quot;

长久以来,OO编程思想的一个重要信条是:多用组合,少用继承,这被广为接受和认可.Scala引入Trait(特质)之后,这一点"似乎"受到了冲击,你可以看到,在很多Scala代码里出现了通过继承多个Trait为一个Class混入(追加)新功能的案例,而其中有不少案例是过去我们在传统OO语言(例如Java)中不会或不建议的做法,因为看上去那确实是在滥用继承. 举个简单的例子,日志功能是非常普遍的需求,传统的Java程序里是以"组合"的方式为一个类添加这一功能的,也就是在

C++(18)再谈指针

指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区.让我们分别说明. 先声明几个指针放着做例子: 例一: int *ptr; char *ptr; int **ptr; int (*ptr)[3]; int *(*ptr)[4]; 指针的类型 从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型.这是指针本身

再谈指针数组与数组指针

经常遇到这两个概念,很容易混淆,这里细细总结一下. 指针数组:是一个数组,数组的元素是指针.数组占多少个字节由数组本身决定. 数组指针:是一个指针,它指向一个数组.在32位系统下永远是占4 个字节. 举例说明: 1)int *p1[n]; 2)int (*p2)[n]; 1)"[]"的优先级比"*"要高.p1 先与"[]"结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素.即p1是指针数组,其包含n个指向int

【Go语言】【13】再谈GO语言的结构体

本文从如下四个方面再领着大家认识结构体 匿名结构体和匿名成员的结构体 值传递和引用传递 再谈嵌套结构体 面向对象 1.匿名结构体和匿名成员的结构体 如上篇所述,一个结构体需要先声明,再初始化,最后把初始化后的结构体赋值给其它变量,例如: /*声明结构体*/ type employee struct{ name,address string height,weight float64 } /*初始化结构体,并赋给变量emp*/ emp := employee{name:"eagle",

浅谈c语言typedef 与结构体指针(个人小经验)

 #include<stdio.h> #include<string.h> typedef struct emp{ char sex[8]; char name[15]; int age; }*emp;//这里我们用typedef把emp这个结构体变成了*emp这种指向结构体成员的结构体指针 /*typedef struct emp{ char sex[8]; char name[15]; int age; }pi,*emp;//为了程序的可读性最好不要这样声明*/ int m

一起talk C栗子吧(第一百六十九回:C语言实例--再谈内置宏)

各位看官们,大家好,上一回中咱们说的是C语言中的布尔–bool类型的例子,这一回咱们说的例子是:再谈内置宏 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在第一百二十四回中介绍了C语言中的内置宏,当时介绍了常用的内置宏_LINE_和_FILE_.并且介绍了如何使用它们来输出它们所在位置的行号和所在的文件名.大家都知道,这两个内置宏经常被用来在文件中添加调试信息.因为我们写的程序难免会有错误,所以需要对程序进行调试.在文件中加入内置宏后,我们通过调试可以快速地找到错误发生在哪个

C语言第十二回合:指针

C语言第十二回合:指针 [学习目标] 1.        指针 2.        指针与数组 A: 指针的概念 内存存储单元按字节排序,每个字节编有序号,我们称之为地址.由于可以通过地址就可以找到所要的内存单元,所以我们把地址成为指针.指针是个特殊的变量,它里面存储的数值被解释为内存里的一个地址 作用: (1)       指针可以有效地表示复杂数据结构,如队列.栈.链表等 (2)       指针可以像汇编一样处理内存地址,为动态内存分配提供支持 (3)       指针可以实现对数组和字符

再谈 Go 语言在前端的应用前景

12 月 23 日,七牛云 CEO & ECUG 社区发起人许式伟先生在 ECUG Con 2018 现场为大家带来了主题为<再谈 Go 语言在前端的应用前景>的内容分享. 本文是对演讲内容的实录整理. 今年是举办 ECUG Con 的第 11 年,之前我谈的基本都是服务端的开发实践.从去年起我开始不谈后端而是谈前端.当然,去年我没有说为什么我会关注前端.今天再谈 Go 语言在前端的应用之前,我先简单聊一下思路脉络,为什么我今天会关注前端. 前端的演进 最早的 PC 时期,常见的设备主

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he