您的位置:首页 > 大数据 > 人工智能

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

2017-11-15 21:01 246 查看
[align=center]指针与字符串[/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=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]
#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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言