(一)指针数组

指针数组就是每一个元素存放一个地址,相当于一个指针变量。
如:int *p[4]
指针数组比较适合用来指向若干字符串,使得处理字符串更加灵活。
例如,现在要将若干字符串按字母顺序由小到大输出

 #include<stdio.h>
#include<string.h>
int main(){
void sort(char *name[],int n);
void print(char *name[],int n);
char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"}; int n=;
sort(name,n);
print(name,n);
return ;
} void sort(char *name[],int n) //对字符串排序
{
char *temp;
int i,j,k;
for(i=;i<n-;i++){
k=i;
for(j=i+;j<n;j++)
if(strcmp(name[k],name[j])>) k=j;
if(k!=i){
temp=name[i];name[i]=name[k];name[k]=temp; //将指向第i个字符串的数组元素的值与指向第k个字符串数组元素的值对换
}
}
} void print(char *name[],int n){ //输出字符串
int i;
for(i=;i<n;i++)
printf("%s\n",name[i]);
}

通过上例子,试比较
if(strcmp(name[k],name[j])>0)和if(strcmp(*name[k],*name[j])>0)的区别:
if(strcmp(name[k],name[j])>0)是从头到尾一次比较字符串中的元素
而if(strcmp(*name[k],*name[j])>0)只比较指向字符串中的首元素
附:strcmp只是单纯的按照ascii码大小从头到尾比较,而stricmp则不区分大小写

(二)指向指针的指针

指向指针数据的指针变量 char **p;
指针数组的元素可以指向字符串,也可以指向整型数据或者实型数据
指向字符串的小例子

 #include<stdio.h>
int main(){
char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
char **p;
int i;
for(i=;i<;i++){
p=name+i; //先使p指向name数组的name[0],*p是name[0]的值,即第一个字符串首字符的地址,依次输出5个字符串
printf("%s\n",*p);
}
}

指向整型数据的小例子

 #include<stdio.h>
int main(){
int a[]={,,,,};
int *num[]={&a[],&a[],&a[],&a[],&a[]};
int **p,i;
p=num;
for(i=;i<;i++){
printf("%d ",**p); //p是&num[0],*p是num[0]的值,即a[0],**p是a[0]的值
p++;
}
}

利用指针变量访问另一变量称为间接访问
指向指针数据的指针用的就是二级间址,说通俗点就是通过两个地址访问一个变量,当通过多个(大于2)地址访问变量时,就称为多重指针

(三)指针数组作main函数形参

带参数的main函数原型:
int main(int argc, char *argv[ ] );

argc和argv是main函数的形参,它们是程序的命令行参数。argc指参数的个数,argv指参数向量,其中每一个元素指向命令行中的一个字符串。
main函数是操作系统调用的,所以实参只能由操作系统给出。在操作命令的状态下,实参是和执行文件的命令一起给出的。命令行中包括命令名和要传给main函数的参数

举个例子, $./echo computer and tom
echo是命令名,computer等是参数,此例子中argc为4,因为命令名也算其中一个参数

指针数组与带参main函数的更多相关文章

  1. Atitit dsl对于数组的处理以及main函数的参数赋值

    Atitit dsl对于数组的处理以及main函数的参数赋值 1.1. 词法解析..添加了[] 方括号的解析支持1 1.2. Ast建立.添加了数组参数的支持..使用了递归下降法..getparam ...

  2. jquery带参插件函数的编写

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  3. python twisted 的定时调用带参的函数

    无参情况:lc = task.LoopingCall(fun)如果fun带有参数,可以使用functools.partial传递 (fun2 = partial(fun, param1,[...]) ...

  4. 带参数的main函数以及execl函数的应用

    ---恢复内容开始--- 代码1:(带参main函数) #include<stdio.h> int main(int number, char *parameter[]) { ; prin ...

  5. CPP-基础:函数指针,指针函数,指针数组

    函数指针 函数指针是指向函数的指针变量. 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个 ...

  6. 指向函数的指针数组(C++)

    我们能够创建一个指向函数的指针数组.为了选择一个函数,只需要使用数组的下标,然后间接引用这个指针.这种方式支持表格式驱动码的概念:可以根据状态变量去选择被执行函数,而不用条件语句或case语句.这种设 ...

  7. C 函数指针数组

    名字有点绕口,其实更应该翻译为指针函数数组. 记录下对Head-First C这一节的理解,几乎每天班车上都会咪两眼,几乎每次都是看不懂,敲一敲的时候才有些明白. 通俗点讲,这功能解决的是,具有同种签 ...

  8. C函数指针数组的定义和使用

    1.使用函数指针数组来实现计算器 2.通过函数指针变量来调用对应的函数 #include <stdio.h> int add(int a,int b){ return a+b; } int ...

  9. main函数参数解析

    int argc,char *argv agrc表示参数的个数 argv储存参数 这个函数的意思是逐一输出参数 实际上,main函数也可以带参数.带参数main函数的定义格式如下:void main( ...

随机推荐

  1. C#之文件缓存

    写在开头 今天就放假了,照理说应该写今年的总结了,但是回头一看,很久没有写过技术类的文字了,还是先不吐槽了. 关于文件缓存 写了很多的代码,常常在写EXE(定时任务)或者写小站点(数据的使用和客户端调 ...

  2. python dns查询与DNS传输漏洞查询

    前言: 昨天晚上在看DNS协议,然后想到了 DNS传输漏洞.便想写一个DNS查询与DNS传输漏洞查询 DNS传输漏洞介绍: DNS传输漏洞:若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录 ...

  3. Selenium+PhantomJS实现简易有道翻译爬虫

    Selenium一款自动化测试工具,当然用来写爬虫也是没有问题的.它支持Chrome.Safari.Firefox等主流界面式浏览器,另外它也支持多种语言开发,比如 Java,C,Ruby,Pytho ...

  4. Visual Studio 2017 for Mac 连接Git的奇怪问题

    VS for Mac连接Git的时候遇到个奇怪的问题, 无法将已存在的解决方案绑定并提交到GitHub中去. VS版本7.3.3 问题复现 以为自己操作有问题, 新建项目测试一下, 新建的时候没有勾选 ...

  5. Gitlab的安装与实践

    tucao 先让我来吐槽一下下,使用GitHub以及Bitbucket比较不太稳定,尤其是后者,可以说是极其不稳定,甚至无法克隆仓库到本地.因此,决定安装一款开源且免费的Git服务到自己的服务器主机上 ...

  6. Ubuntu下利用Apache转发模块实现反向代理

    Apache的反向代理主要利用转发模块,proxy和proxy_http 先配置 Apache 支持proxy 和 proxy_http 在Ubuntu系统下,Apache的配置文件在目录/etc/a ...

  7. 测试同学难道要写一辈子的hello world?

    最近我们在测试团队内推行自动化用例责任制,大致的意思是:我们安排培训资源,提供技术支持和一对一辅导,要求每一个自主选择了自动化和接口测试发展通道的同学必须让自己负责的项目自动化用例覆盖率有所提升. 后 ...

  8. java-redis字符类数据操作示例(一)

    对于大部分程序猿来讲,学习新知识重在编码实践,于我也是这样.现在初识redis,一直看文章难免感觉是浮光掠影,印象不深.所以间隙中,将自己的测试代码整理成博客,旨在加深记忆并提醒自己对待编程要用心沉下 ...

  9. CSS布局(六) 对齐方式

    一.水平居中: (1). 行内元素的水平居中? 如果被设置元素为文本.图片等行内元素时,在父元素中设置text-align:center实现行内元素水平居中,将子元素的display设置为inline ...

  10. java3 - 流程控制

    一.Java 有三种主要的循环结构: 需求:分别使用三种循环将 1 到 100 的整数输出到控制台. 1.for 循环 for(初始化语句; 布尔表达式语句; 更新语句) { //循环体内容 } 示列 ...