指针的进阶

一.指针数组

1.概念:如果数组的各个元素都是指针类型,用于存放内存地址, 那么这个数组就是指针数组。

2.一维指针数组定义的一般格式为: 类型名 * 数组名[数组长度] ;

3.例:

int main(void)
{ 
  int i, flag = 0; char ch;
  const char *color[5] = {"red", "blue", "yellow", "green", "black" };
  printf("Input a letter: "); ch = getchar();
  for(i = 0; i < 5; i++) 
 {
     if( *color[i] == ch )
       {
         puts( color[i] ); 
         flag = 1;
        }
 }
  if(flag == 0) 
  printf("Not Found\n"); 
  return 0;
}

color是一个指针数组,其中每个 数组元素都是一个字符指针,分别 指向代表颜色的字符串

color[i]表示第i个单词的首地址,而* color[i]是第i个单词的首字母。 

二.二级指针 

1.

1.语句 int (*pb) [6]; 定义了一个指针变量pb,它是一个 指向数组的指针,指向的是长度为6的int型数组。(二维数组)(多维数组实际上是数组的数组, 二维数组就是每个元素都是一个一维数组的数组。)

for( i= 0 ;i<3 ; i++ ,p++)
   for( j= 0 ;j<4 ;j++ )
       sum +=(*p)[j] ;

例:

#include <stdio.h>
int main()
{
    int a[3][4]={ {1,2,3},{4,5,6} } ;
    printf("%x\n" , a+1 ) ;
    printf("%x\n" , *(a+1) ) ;
    printf("%d\n", **(a+1) ) ;
    printf("%d\n", *(*(a+1)+2) ) ;
    return 0;
}
a+1是第1行的地址
*(a+1)是第1行首元素的地址
**(a+1)是第1行首元素的值

2.语句 int *p[5]; 定义了含有5个元素的一维数组p ,每个元素是一个指向整型对象的指针数组。

例:

int main(void) //指针数组实现字符串排序
{ 
    int i , j , n=5; 
    char *ptemp , *name[5] = {"Li Ming","Wang LingLing","Li Lei","Yu Fang","Sun Xin"} ;
    for(i = 1; i < n; i++)
    for(j = 0; j < n-i; j++) 
    if(strcmp(name[j], name[j+1])>0)
       { 
        ptemp = name [j] ;
        name [j] = name [j+1] ;
        name [j+1] = ptemp ; 
       }
    for(i = 0; i < 5; i++) 
    printf("%s \n", name[i]);
}

 name[j]和name[j+1]交换的是地址指向; 字符串在内存中的位置没有移动。

相关推荐

  1. 指针

    2024-04-09 18:56:01       25 阅读
  2. (C语言)指针

    2024-04-09 18:56:01       45 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 18:56:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 18:56:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 18:56:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 18:56:01       18 阅读

热门阅读

  1. 力扣经典150题第九题:跳跃游戏

    2024-04-09 18:56:01       17 阅读
  2. K8S Deployment HA

    2024-04-09 18:56:01       12 阅读
  3. 查找同一个进程显示在任务栏上的多个窗口

    2024-04-09 18:56:01       15 阅读
  4. Qt 翻译工具:使用 tr() 函数实现多语言支持

    2024-04-09 18:56:01       20 阅读
  5. Vue中Suspense组件详细介绍

    2024-04-09 18:56:01       12 阅读
  6. 特权账号怎么管?企业真的很为难!

    2024-04-09 18:56:01       13 阅读
  7. NIO与BIO

    2024-04-09 18:56:01       11 阅读
  8. 蓝桥杯 算法训练 藏匿的刺客

    2024-04-09 18:56:01       11 阅读
  9. MySQL 常见和不常见的所有查询语句

    2024-04-09 18:56:01       16 阅读