C语言中的指针数组和数组指针
2017-11-08 17:42
246 查看
可以将 *string看成数组 a[] 下的a,即指针是指向数组的首地址的;
指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。
指针数组( * stings[] )
c中指针可以作数组使用比如:
这时会报错,你不能改变数组的地址;
但是可以这样使用:
在指针数组中如下代码:
这里创建了一个指针数组strings,它的每个数组元素相当于一个指针变量,都可以指向一个整形变量,其值为地址。也就是说strings数组中每个元素存放的是字符串的地址。
这里可以将指针数组看成 * (strings[1])之类,后面的那部分 strings[1] 看成指针变量 p.
数组指针( (*strings)[] )
数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[10]; p即为指向数组的指针,又称数组指针。
int a[4][5];
int (*p)[5]=a;
这里所代表的 *(p+i) 是二维数组a[i][0]的地址。
指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。
指针数组( * stings[] )
c中指针可以作数组使用比如:
int a[] = "hello world"; int *p; p = a; printf("%c", *p++); printf("%c", p[1]); //利用数组形式输出数组不一定能作指针用比如:
int a[] = "hello world"; printf("%c", *a++); //这里不能改变数组的地址,会报错
这时会报错,你不能改变数组的地址;
但是可以这样使用:
int a[] = "hello world"; printf("%c", *(p+1)); //没有改变数组地址,可行
在指针数组中如下代码:
#include<stdio.h> int main(void) { char **p, i; char *strings[] ={ "one", "two", "three" }; p=strings; //strings是地址的地址,所以要定义**p for(i=0; i<3; i++) printf("%s\n", *(p++)); //这里*(p++)是取出存储在数组中的每一个字符串的地址 return 0; }
这里创建了一个指针数组strings,它的每个数组元素相当于一个指针变量,都可以指向一个整形变量,其值为地址。也就是说strings数组中每个元素存放的是字符串的地址。
这里可以将指针数组看成 * (strings[1])之类,后面的那部分 strings[1] 看成指针变量 p.
数组指针( (*strings)[] )
数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[10]; p即为指向数组的指针,又称数组指针。
int a[4][5];
int (*p)[5]=a;
这里所代表的 *(p+i) 是二维数组a[i][0]的地址。
相关文章推荐
- 【嵌入式开发】C语言 结构体相关 的 函数 指针 数组
- C语言中的数组与指针
- C语言的指针和数组
- C语言数组和指针是如何访问的
- C语言复习之指针数组
- C语言中的指针与数组
- C语言中数组与指针的区别
- C语言之指针、数组和函数
- C语言结构体里的成员数组和指针
- 详解Swift中对C语言接口缓存的使用以及数组与字符串转为指针类型的方法
- 指针和数组都是C语言的精髓所在,两者有何联系区别?
- C语言精华记录——肆(数组与指针②)
- C专家编程之为什么C语言把数组形參当做指针:数组/指针实參
- 指针和数组、字符串 | C语言教程 | C语言系列教程
- 关于C语言中的数组指针、指针数组以及二级指针
- 关于C语言数组与指针的联系一起
- C语言笔记6--指针与数组
- C语言指针与数组
- 20170214C语言提升08_指针_01变量及指针及数组
- iOS之C语言指针,数组小结