菜鸟学习历程【7】 指针数组、数组指针、main命令行

来源:互联网 发布:淘宝阿迪达斯高仿店 编辑:程序博客网 时间:2024/06/03 14:53
指针与字符串
1.用字符数组存放一个字符串,用数组名输出该字符;
例如:
char string[] = "I love china";printf("%s\n", string);

2.用字符串指针指向一个字符串;
例如:
char *string[] = {"I love china", "I am "};printf("%s\n", *string); //输出第一个字符串printf("%s\n",*(string+1)); //输出第二个字符串

Tips:malloc的使用

使用malloc,在堆上分配内存,配合free释放内存;

#include <stdio.h>#include <stdlib.h>int main(){    char *p = NULL;    p = (char *)malloc(sizeof(char)*10);    free(p);    return 0;}

函数与指针
     
       在C语言中,一个函数总是占用一段连续的内存区,而函数名就是入口地址。把函数的首地址,赋予一个指针变量,我们把这种指向函数的指针变量称为"函数指针变量"。
       函数指针变量的一般形式为:
               类型说明符(*指针变量名)();
       例如:int  (*pf) ();
       表示pf是一个指向函数入口的指针变量,该函数的返回值是整型。

            例如:func.c
#include <stdio.h>typedef int (*FUNCTION)(int , int);int add(int a, int b){    return a + b;}int main(){    FUNCTION  p = add;    printf("%d\n", p(1, 2))        return 0;}
说明:在函数名之前加 * 号表明这是一个指针型函数,即返回值是一个指针。


      int(*p)() 和 int *p()的区别:
      int(*p)()是一个变量说明,说明p是一个指向函数入口的指针变量,是一个函数指针变量
      int *p()是一个函数说明,说明P是一个指针型函数,p两边没有括号,返回值是一个指向整型的指针。

思考:下面两个表达式什么意思?

1.int *(*(*fp)(int))[10];
   fp先向右看,遇到“)”再向左,遇到“*”,所以fp是一个指针;
首先fp是一个指针,指向一个函数,这个函数只有一个int形参,且返回值为指针,这个指针指向含有10个元素的数组,数组的类型为int*类型。

2.int *(*(*array[5]()))();
首先array是一个含有5个元素的数组,每个元素是一个指针,该指针指向一个函数,这个函数的形参为空,返回值是一个指针,这个指针又指向一个形参为空的函数,函数的返回值为int*。

指针数组

指针数组说明的一般形式为:
       类型说明符 *数组名【数组长度】;
其中,类型说明符为指针所指向的变量的类型。
      例如: int *pa[3];
表示pa是一个指针数组,它有3个元素,每个元素值都是一个指针,指向整型变量。
表现形式含义&a指向二维数组的指针,即数组的首地址a二维数组名,指向一维数组a[0],第0 地址a[0]、*(a + 0)、*a第0行第0列地址a + 1、&a[1]第1行首地址a[1]、*(a+1)第1行第0列地址a[1]+2、*(a+1)+2、&a[1][2]第1行第2列地址*(a[1] + 2)、*(*(a+1)+2)、a[1][2]第1行第2列元素的值

指针数组与数组指针
一、数组指针

   形如:int (*p)[n]

   说明:“[]”,“()”的优先级是一样的,但结合方向是从左向右,所以先运行()内的*p,即*p首先是一个指针,指向一个整型的一维数组。

二、指针数组

   形如:int *p[5];
  
   说明:“[]”的优先级高,因此p与“[]”先结合形成一个数组,又根据int *可以知道,这是一个整型指针数组。

例如:
#include <stdio.h>int  main(){      int a[3][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8}};    int i;    int (*p)[4]=a,*q=a[0];       //p是一个数组指针,q指向第0行第0列的地址    for(i=0;i<3;i++)    {   if(i==0)   (*p)[i+i/2]=*q+1;     else   p++,++q;    }    for(i=0;i<3;i++)       printf("%d,",a[i][i]);    printf("%d,%d\n",*((int *)p),*q);}
运行结果:2 4 7 5 3

main函数的参数

形如:main(int argc , char *argv[] )

说明:argc必须是一个整型变量,表示命令行中参数的个数(文件名本身也是一个参数)

           argv参数是一个字符串数组,其各元素值为命令行中各字符串。

例如:test.c
#include <stdio.h>int main(int argc, char *argv[]){    int i;    printf("%d\n", argc);    for(i = 0;i < argc;i++)    {         printf("%s\n",argv[i]);     }           return 0;}
运行:./test.c  hello world
结果:
3
./test
hello
world
原创粉丝点击