菜鸟学习历程【7】 指针数组、数组指针、main命令行
来源:互联网 发布:淘宝阿迪达斯高仿店 编辑:程序博客网 时间:2024/06/03 14:53
指针与字符串
1.用字符数组存放一个字符串,用数组名输出该字符;
例如:
2.用字符串指针指向一个字符串;
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
阅读全文
0 0
- 菜鸟学习历程【7】 指针数组、数组指针、main命令行
- 指针数组--main参数
- C语言学习历程(十二)数组指针与指针数组
- 菜鸟学习历程【6】关键字、指针
- 学习:“指针数组”、“ 数组指针 ”、“函数指针”、“ 函数指针数组”、“指向函数指针数组的指针”
- 指针数组 和 数组指针分析 main函数的参数
- 指针数组和数组指针的区别以及main函数
- 从main函数学指针数组和指针的指针
- C++学习 - 数组指针/指针数组
- 指针数组、数组指针
- 指针数组/数组指针
- 指针数组/数组指针
- 数组指针 指针数组
- 指针数组,数组指针
- 数组,指针,数组指针
- 数组,指针,数组指针
- 指针数组&数组指针
- 指针数组&数组指针
- linux环境的命令cd
- lib、dll环境配置
- (笔记)SSH之Hiberate
- 浅析Android下的Android.mk文件(三)
- 中国都有哪些顶级优秀的程序员?
- 菜鸟学习历程【7】 指针数组、数组指针、main命令行
- 接口
- C++对象和类笔记
- 创建student.txt
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
- 函数的三种角色
- PHP增删改查完成感想
- i++和++i的那些陷阱坑