菜鸟学习历程【7】 指针数组、数组指针、main命令行
2017-11-15 21:01
246 查看
[align=center]指针与字符串[/align]
[align=left]1.用字符数组存放一个字符串,用数组名输出该字符;[/align]
例如:
2.用字符串指针指向一个字符串;
[align=left]例如:[/align]
Tips:malloc的使用
[align=left]
[/align]
[align=left]使用malloc,在堆上分配内存,配合free释放内存;[/align]
[align=left]
[/align]
[align=center]函数与指针[/align]
[align=left]
[/align]
[align=left] 在C语言中,一个函数总是占用一段连续的内存区,而函数名就是入口地址。把函数的首地址,赋予一个指针变量,我们把这种指向函数的指针变量称为"函数指针变量"。[/align]
[align=left] 函数指针变量的一般形式为:[/align]
[align=left] 类型说明符(*指针变量名)();[/align]
[align=left] 例如:int (*pf) ();[/align]
表示pf是一个指向函数入口的指针变量,该函数的返回值是整型。
[align=left]
[/align]
[align=left] 例如:func.c[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left] int(*p)() 和 int *p()的区别:[/align]
[align=left] int(*p)()是一个变量说明,说明p是一个指向函数入口的指针变量,是一个函数指针变量;[/align]
[align=left] int *p()是一个函数说明,说明P是一个指针型函数,p两边没有括号,返回值是一个指向整型的指针。[/align]
[align=left]
[/align]
[align=left]思考:下面两个表达式什么意思?[/align]
[align=left]
[/align]
[align=left]1.int *(*(*fp)(int))[10];[/align]
[align=left] fp先向右看,遇到“)”再向左,遇到“*”,所以fp是一个指针;[/align]
[align=left]首先fp是一个指针,指向一个函数,这个函数只有一个int形参,且返回值为指针,这个指针指向含有10个元素的数组,数组的类型为int*类型。[/align]
[align=left]
[/align]
[align=left]2.int *(*(*array[5]()))();[/align]
[align=left]首先array是一个含有5个元素的数组,每个元素是一个指针,该指针指向一个函数,这个函数的形参为空,返回值是一个指针,这个指针又指向一个形参为空的函数,函数的返回值为int*。[/align]
[align=left]
[/align]
[align=center]指针数组
[/align]
[align=left]
[/align]
[align=left]指针数组说明的一般形式为:[/align]
[align=left] 类型说明符 *数组名【数组长度】;[/align]
[align=left]其中,类型说明符为指针所指向的变量的类型。[/align]
[align=left] 例如: int *pa[3];[/align]
[align=left]表示pa是一个指针数组,它有3个元素,每个元素值都是一个指针,指向整型变量。[/align]
[align=center]
[/align]
[align=center]指针数组与数组指针[/align]
[align=left]一、数组指针[/align]
[align=left]
[/align]
形如:int (*p)
[align=left]
[/align]
[align=left] 说明:“[]”,“()”的优先级是一样的,但结合方向是从左向右,所以先运行()内的*p,即*p首先是一个指针,指向一个整型的一维数组。[/align]
[align=left]
[/align]
[align=left]二、指针数组[/align]
[align=left]
[/align]
[align=left] 形如:int *p[5];[/align]
[align=left]
[/align]
[align=left] 说明:“[]”的优先级高,因此p与“[]”先结合形成一个数组,又根据int *可以知道,这是一个整型指针数组。[/align]
[align=left]
[/align]
[align=left]例如:[/align]
[align=left]
[/align]
[align=center]main函数的参数[/align]
[align=left]
[/align]
[align=left]形如:main(int argc , char *argv[] )[/align]
[align=left]
[/align]
[align=left]说明:argc必须是一个整型变量,表示命令行中参数的个数(文件名本身也是一个参数)[/align]
[align=left]
[/align]
[align=left] argv参数是一个字符串数组,其各元素值为命令行中各字符串。
[/align]
[align=left]
[/align]
例如:test.c
[align=left]结果:[/align]
[align=left]3[/align]
[align=left]./test[/align]
[align=left]hello[/align]
[align=left]world
[/align]
[align=left]1.用字符数组存放一个字符串,用数组名输出该字符;[/align]
例如:
char string[] = "I love china"; printf("%s\n", string);
2.用字符串指针指向一个字符串;
[align=left]例如:[/align]
char *string[] = {"I love china", "I am "}; printf("%s\n", *string); //输出第一个字符串 printf("%s\n",*(string+1)); //输出第二个字符串
Tips:malloc的使用
[align=left]
[/align]
[align=left]使用malloc,在堆上分配内存,配合free释放内存;[/align]
[align=left]
[/align]
#include <stdio.h> #include <stdlib.h> int main() { char *p = NULL; p = (char *)malloc(sizeof(char)*10); free(p); return 0; }
[align=center]函数与指针[/align]
[align=left]
[/align]
[align=left] 在C语言中,一个函数总是占用一段连续的内存区,而函数名就是入口地址。把函数的首地址,赋予一个指针变量,我们把这种指向函数的指针变量称为"函数指针变量"。[/align]
[align=left] 函数指针变量的一般形式为:[/align]
[align=left] 类型说明符(*指针变量名)();[/align]
[align=left] 例如:int (*pf) ();[/align]
表示pf是一个指向函数入口的指针变量,该函数的返回值是整型。
[align=left]
[/align]
[align=left] 例如:func.c[/align]
#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; }说明:在函数名之前加 * 号表明这是一个指针型函数,即返回值是一个指针。
[align=left]
[/align]
[align=left]
[/align]
[align=left] int(*p)() 和 int *p()的区别:[/align]
[align=left] int(*p)()是一个变量说明,说明p是一个指向函数入口的指针变量,是一个函数指针变量;[/align]
[align=left] int *p()是一个函数说明,说明P是一个指针型函数,p两边没有括号,返回值是一个指向整型的指针。[/align]
[align=left]
[/align]
[align=left]思考:下面两个表达式什么意思?[/align]
[align=left]
[/align]
[align=left]1.int *(*(*fp)(int))[10];[/align]
[align=left] fp先向右看,遇到“)”再向左,遇到“*”,所以fp是一个指针;[/align]
[align=left]首先fp是一个指针,指向一个函数,这个函数只有一个int形参,且返回值为指针,这个指针指向含有10个元素的数组,数组的类型为int*类型。[/align]
[align=left]
[/align]
[align=left]2.int *(*(*array[5]()))();[/align]
[align=left]首先array是一个含有5个元素的数组,每个元素是一个指针,该指针指向一个函数,这个函数的形参为空,返回值是一个指针,这个指针又指向一个形参为空的函数,函数的返回值为int*。[/align]
[align=left]
[/align]
[align=center]指针数组
[/align]
[align=left]
[/align]
[align=left]指针数组说明的一般形式为:[/align]
[align=left] 类型说明符 *数组名【数组长度】;[/align]
[align=left]其中,类型说明符为指针所指向的变量的类型。[/align]
[align=left] 例如: int *pa[3];[/align]
[align=left]表示pa是一个指针数组,它有3个元素,每个元素值都是一个指针,指向整型变量。[/align]
表现形式 | 含义 |
&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列元素的值 |
[/align]
[align=center]指针数组与数组指针[/align]
[align=left]一、数组指针[/align]
[align=left]
[/align]
形如:int (*p)
[align=left]
[/align]
[align=left] 说明:“[]”,“()”的优先级是一样的,但结合方向是从左向右,所以先运行()内的*p,即*p首先是一个指针,指向一个整型的一维数组。[/align]
[align=left]
[/align]
[align=left]二、指针数组[/align]
[align=left]
[/align]
[align=left] 形如:int *p[5];[/align]
[align=left]
[/align]
[align=left] 说明:“[]”的优先级高,因此p与“[]”先结合形成一个数组,又根据int *可以知道,这是一个整型指针数组。[/align]
[align=left]
[/align]
[align=left]例如:[/align]
#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
[align=left]
[/align]
[align=center]main函数的参数[/align]
[align=left]
[/align]
[align=left]形如:main(int argc , char *argv[] )[/align]
[align=left]
[/align]
[align=left]说明:argc必须是一个整型变量,表示命令行中参数的个数(文件名本身也是一个参数)[/align]
[align=left]
[/align]
[align=left] argv参数是一个字符串数组,其各元素值为命令行中各字符串。
[/align]
[align=left]
[/align]
例如: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
[align=left]结果:[/align]
[align=left]3[/align]
[align=left]./test[/align]
[align=left]hello[/align]
[align=left]world
[/align]
相关文章推荐
- 菜鸟学习历程【6】关键字、指针
- 菜鸟学习历程【3】 数据类型、运算符、语句、数组(1)
- [C++学习历程]基础部分 C++中的指针数组和结构
- C语言学习历程(八)数组和指针的关系及几个程序
- [C++学习历程]基础部分 C++中的指针数组和结构
- 菜鸟学习历程【4】数组(2)、函数
- [C++学习历程]基础部分 C++中的指针数组和结构
- 【指针数组】 【数组指针】想到的,适合菜鸟学习一下
- C语言学习历程(十二)数组指针与指针数组
- 【指针数组】 【数组指针】想到的,适合菜鸟学习一下
- [学习小记] 从汇编角度看局部变量的分配及数组名与指针的关系
- 菜鸟学习历程【22】网络编程、TCP/IP、TCP与UDP
- c++学习笔记2——指向字符串的指针数组?
- [学习小记] 从汇编角度看局部变量的分配及数组名与指针的关系 .
- 数组和指针 - 2【C++ Primer 学习笔记 - 第四章】
- C语言学习笔记(四)——数组和指针
- C/C++学习笔记18:指针数组和数组指针
- .Asp.Net 2.0 学习历程 菜鸟到中级程序员的飞跃
- 学习札记: C++指向字符数组的指针
- 我的 C++ 学习历程 之五 指针与引用