《C语言学习笔记》指针数组及其应用
C语言中,最灵活但又容易出错的莫过于指针了。而指针数组,是在C中很常见的一个应用。指针数组的意思是说,这个数组存储的所有对象都为指针。除了存储对象为指针,即一个地址外,其它操作和普通数组完全一样。
#include <stdion.h>
int main() {
int i;
char *name[] = {"BASIC", "FORTRAN", "C++", "Pascal", "COBOL"};
; i < (sizeof(name)/sizeof(char *)); i++)
printf("%s ", name[i]);
;
}
上面的代码中,定义了一个名为name的指针数组。它的数据类型为char *,表示其中存储的所有数据都为char指针,而name后面的[]则表示这是一个数组,并且未指定数组的大小。定义的同时,用{}内的内容初始化这个指针数组。而后,对指针数组的引用中,每个数组元素,都是一个指向字符串的指针。它们的对应关系如下图:

指针数组最常见的用法是在主函数,用以接收UNIX系统中由命令行传递的参数。记得大一学C语言时,当时什么指针数组,数组指针,完全就是不明就里。我记得,当时,也有讲到指针数组的命令行参数的应用。不过,在一个用Windows 系统下,用VC 6.0教学的环境下,都没谁来得及问下老师什么是命令行。因为不懂的实在太多了,不知从何问起了。不过想想也对,当时就算给我讲了什么是命令行,我也不一定能懂。
带命令行参数的C主函数原型:int main(int argc, char *argv[])。argc 参数会记录参数个数,而argv参数会具体记录所有参数,每一个参数都是以指针寻址的字符串,即指针数组中的每个元素都指向一个参数的地址。所以通过访问argv[1],可以获得目录名。在命令行参数的应用中,argv[0]指向当前命令名,argv[n]指向通过命令行传递进来的第n个参数。比如:UNIX中的ls命令的一个简单实现。
#include "apue.h"
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
)
err_quit("usage: ls directory_name");
])) == NULL)
err_sys(]);
while ((dirp = readdir(dp)) != NULL)
printf("%s\n", dirp->d_name);
closedir(dp);
exit();
}
这样的应用,在UNIX中,不知还有多少。一开始学习C语言时,完全是蒙的。不知其有何具体用处。而学了UNIX之后,就发现UNIX就是C的最佳实践。毕竟,C是作为写UNIX的工具而发明的。
《C语言学习笔记》指针数组及其应用的更多相关文章
- C语言学习笔记 (007) - 数组指针和通过指针引用数组元素的方法总结
1.数组指针:即指向数组的指针 那么, 如何声明一个数组指针呢? ]; /*括号是必须写的,不然就是指针数组:10是数组的大小*/ 拓展:有指针类型元素的数组称为指针数组. 2.通过指针引用数组元素的 ...
- C语言学习笔记 (004) - 数组名和数组首地址(转)
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中) ...
- c语言学习笔记 - 指针和数组
结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...
- C语言学习笔记--指针和数组的关系
1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...
- C语言学习笔记之数组与指针的关系
首先,大家先需知道一个关于基类型的概念 基类型:组成一个新类型的基础类型 这句话是什么意思呢?举个例子: int a[3] = {1,2,3}; 上面是由三个int类型的数组成一个新的类型也就是数组, ...
- c语言学习笔记 - 指针和字符串
前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...
- c语言学习笔记 函数数组传递笔记
今天学习c语言的一个小例子,果然还是陷入了php的编程习惯里,这里记录一下. #include <stdio.h> //例子很简单,就是编写一个函数把传递进来的数组里的值都赋值为1而已 / ...
- Go语言学习笔记(4)——数组和切片
1 数组的特点: 长度固定.元素数据类型相同.下标从0开始 1.1 声明和初始化: var array_name [size] type var arr1 [10] float32 ...
- c语言学习笔记.指针.
指针: 一个变量,其值为另一个变量的地址,即,内存位置的直接地址. 声明: int *ptr; /* 一个整型的指针,指针指向的类型是整型 */ double *ptr; /* 一个 double 型 ...
- C语言学习笔记--指针阅读技巧
1. 指针阅读技巧:右左法则 (1)从最里层的圆括号中未定义的标示符看起 (2)首先往右看,再往左看 (3)遇到圆括号或方括号时可以确定部分类型,并调转方向 (4)重复 2.3 步骤,直到阅读结束 注 ...
随机推荐
- linuxmint获取root
1.进入系统à点击桌面左下角的菜单à点击系统设置 2. 在系统设置里面找到登陆窗口并进去 3.打入自己设置的开机登陆密码 4. 选择选项,并把运行root登陆的勾打上 5.重启生效
- Struts文件上传机制
1首先建立文件上传jsp页面如下 <form action="" method="post" enctype="multipart/form-d ...
- Python学习(2)
python基础学习(二)2.1 python定义函数用def,没有返回类型?def myabs(x) if x>0: return x python定义的函数可以多个直接一起返回,这一点和ja ...
- C链表反转(时间复杂度O(n))
面试的时候经常会出现的问题,现在都做一遍,回忆一下,练练手. 这个题目需要注意两点: 1.head->next 要先设置为NULL ,否则反转后,它还是指向之前的next节点 2.需要有一个tm ...
- SQL Server数据库同步SQL
select table_name,COLUMN_NAME,data_TYPE,CHARACTER_OCTET_LENGTH,CHARACTER_MAXIMUM_LENGTH from informa ...
- QTP下载链接
QTP下载链接 QTP官网下载:http://www8.hp.com/us/en/software-solutions/software.html?compURI=1172957#.UNMOQ2_FW ...
- ltrace killed by SIGTRAP
[Ltrace-devel] ltrace stucks with pthreads Heiko Carstens heiko.carstens at de.ibm.comFri Apr 14 11: ...
- 【转】C/C++求模求余运算符——2013-08-20
http://blog.csdn.net/whealker/article/details/6203629 求模运算符(%),或称求余运算符,也就是数学上所谓的除法中的余数,%两侧均应为整数, |小| ...
- how to forget about delta cycles for RTL design
A delta cycle is a VHDL construct used to makeVHDL, a concurrent language, executable on asequential ...
- Android的Manifest配置文件介绍
一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(ac ...