指针数组、字符串指针、指向指针的指针、指针数组作main函数的形参

1、指针数组
指针数组的概念:
一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都相当于一个指针变量。一维指针数组的定义形式为

类型名数组名[数组长度];
例如: 

        int*name[4];

#include <stdio.h>

void main()
{
      int a[5] = {1, 3, 5, 7, 9};
      int *name[5] = {&a[0], &a[1], &a[2], &a[3], &a[4]};
      int i;

      for( i=0; i < 5; i++ )
      {
            printf("%d   ", *name[i]);
      }
      printf("\n\n");
}

 定义字符串数组及定义字符串指针打印:

#if 0
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main()
{
	char str[] = { "hello furong" };
	int i;
	for (i=0; *(str+i)!='\0'; i++)
	{
		printf("%c", str[i]);
	}	
}
#endif
#if 0
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main()
{
	char *str = { "hello furong" };
	int i;
	for (i = 0; str[i] != '\0'; i++)
	{
		printf("%c", str[i]);
	}
}
#endif
#if 1
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main()
{
	char* str = { "hello furong" };
	int i;
	for (i = 0; *(str+i) != '\0'; i++)
	{
		printf("%c", str[i]);
	}

}
#endif

用for循环打印字符串的条件为'\0','\0'在c语言中为字符串的结束符。

#include <stdio.h>

void main()
{
      char a[] = "Fishc.com is a good web site!", b[40];
      int i;
      
      for(i=0; *(a+i) != '\0'; i++)
      {
            *(b+i) = *(a+i);
      }
      *(b+i) = '\0';

      printf("String a is: %s\n", a);
      printf("String b is: ");
      for(i=0; b[i] != '\0'; i++)
      {
            printf("%c", b[i]);
      }
      
      printf("\n\n");
}
#include <stdio.h>

void main()
{
      char a[] = "Fishc.com is a good web site!", b[40], *p1, *p2;
      int i;
      
      p1 = a;
      p2 = b;
      
      for( ; *p1 != '\0'; p1++, p2++)
      {
            *p2 = *p1;
      }
      *p2 = '\0';

      printf("String a is: %s\n", a);
      printf("String b is: ");
      for(i=0; b[i] != '\0'; i++)
      {
            printf("%c", b[i]);
      }

      printf("\n");
}

 1)用for循环进行字符串赋值后,需要加*(b+i) = '\0';进行结尾。

2)for循环中b[i]不能用阵阵p2代替,指针存储的是字符串的地址,打印指针使用s%字符串型格式符。

 2、指向指针的指针

怎样定义一个指向指针数据的指针变量呢?
形式可以如: char**p;

p的前面有两个*号。*运算符的结合性是从右到左,因此**p相当于*(*p),显然*p是指针变量的定义形式。如果没有最前面的*,那就是定义了一个指向字符数据的指针变量。

现在它前面又有一个*号,表示指针变量p是指向一个字符指针变量的。*p就是p所指向的另一个指针变量。例如:
#include <stdio.h>

void main()
{
      char *name[] = {"Fishc.com", "www.fishc.com", "home.fishc.com", "Fishc.com/dz"};
      char **p;
      int i;

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

3、指针数组作main函数的形参

指针数组的一个重要应用是作为main函数的形参。在以往的程序中,main函数的第一行一般写成以下形式:
p void  main()

括弧中是空的。实际上,main函数可以有参数。

例如: void  main(int  argc,char  *argv[ ])
argc和argv就是main函数的形参。

main函数是由操作系统调用的。那么,main函数的形参的值从何处得到呢?

显然不可能在程序中得到。实际上实参是和命令一起给出的。也就是在一个命令行中包括命令名和需要传给main函数的参数。

命令行的一般形式为:

命令名 参数1 参数2……参数n

#include <stdio.h>

void main(int argc, char *argv[])
{
      while( argc > 1 )  
      {
            ++argv;
            printf("%s\n", argv);
            --argc;
      }
}

执行结果为乱码!

#include <stdio.h>
#include <stdlib.h>

void main (int argc, char *argv[])
{
      int i;

      printf ("the number of string is : %d\n", argc-1);

      for(i=1; i < argc; i++)
      {
            printf ("the string %d is : %s\n", i, argv[i]);
      }
}

定义

含义

int i;

定义整型变量i

int *p;

p为指向整型数据的指针变量

int a[n];

定义整型数组a,它有n个元素

int *p[n];

定义指针数组p,它由n个指向整型数据的指针元素组成

int (*p)[n];

p为指向含n个元素的一维数组的指针变量

int f();

f为带回整型函数值的函数

int *p();

p为带回一个指针的函数,该指针指向整型数据

int (*p)();

p为指向函数的指针,该函数返回一个整型值

int **p;

p是一个指针变量,它指向一个指向整型数据的指针变量

一、指针变量加(减)一个整数
例如:p++、p--、p+i、p-i、p+=i、p-=i等。
 指针变量赋值
将一个变量地址赋给一个指针变量。如:
p=&a;  (将变量a的地址赋给p)
p=array; (将数组array首元素地址赋给p)
p=&array[i];(将数组array第i个元素       的地址赋给p)
p=max;(max为已定义的函数,将ma     x的入口地址赋给p)
p1=p2;(p1和p2都是指针变量,将  p2的值赋给p1)

三、指针变量可以有空值,即该指针变量不指向任何变量,可以这样表示:p=NULL; 

五、两个指针变量比较
若两个指针指向同一个数组的元素,则可以进行比较。指向前面的元素的指针变量“小于”指向后面元素的指针变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值