指针数组和数组指针
2018-03-08 23:11
246 查看
c语言中数组和指针经常性的混合使用,但是很多时候有些逻辑看似正确,但是实际上却大相径庭!
博主从简单的例子对比一些数组指针和指针数组的区别,但是具体的深层次博主并未详细讲解!#include <stdio.h>
int main()
{
char array_1[] = "abcde"; // 字符数组
printf("%c\n", *array_1); // 输出字符 =====> 字符是具体对应字符元素
printf("%s\n", array_1); // 输出字符串=====> 字符串从数组元素首地址开始到'\0'
char *array_2 = "ABCDE" ; // 指针数组
printf("%c\n", *array_2); // 输出字符 =====> 字符是具体对应字符元素
printf("%s\n", array_2); // 输出字符串=====> 字符串从指针数组首地址开始到'\0'
/*
一般字符数组 与 字符指针数组 基本操作类似
字符数组: array_1存放的是是数组首元素地址,也就是a的地址; array_1存放char类型组合的字符串,a本身是字符,故array_1是char *类型
指针数组: array_2存放的是字符串首元素地址,也就是A的地址; array_2存放char类型组合的字符串,A本身是字符,array_2本身是char *类型
*/
// 此下以array_1和指针说明:?
char *p = array_1 ; // char * 指针p指向array_1数组,不是指向array_1
char ** q = &p ; // ok ; q是指向指针p的指针,p是指向数组的指针;p本质是指针,所以q可以指向p
//char ** q = &array_1 ; // ERROR ; array_1是数组名,虽然也是char *类型,但是本质是数组变量
char (*a)[6] =&array_1; // (*a)是一个指针有6个元素,每个元素为char型。也就是a指向的对象是有6个char元素的数组,即a是指向一维数组的指针。
printf("%c\n", *(*a));
printf("%c\n", *(*q));
printf("%s\n", *a);
printf("%s\n", *q);
return 0;
}在VC++6.0的输出结果是:
------------------------------------------------------------------
a
abcde
A
ABCDE
a
a
abcde
abcde
————————————————————————————
博主从简单的例子对比一些数组指针和指针数组的区别,但是具体的深层次博主并未详细讲解!#include <stdio.h>
int main()
{
char array_1[] = "abcde"; // 字符数组
printf("%c\n", *array_1); // 输出字符 =====> 字符是具体对应字符元素
printf("%s\n", array_1); // 输出字符串=====> 字符串从数组元素首地址开始到'\0'
char *array_2 = "ABCDE" ; // 指针数组
printf("%c\n", *array_2); // 输出字符 =====> 字符是具体对应字符元素
printf("%s\n", array_2); // 输出字符串=====> 字符串从指针数组首地址开始到'\0'
/*
一般字符数组 与 字符指针数组 基本操作类似
字符数组: array_1存放的是是数组首元素地址,也就是a的地址; array_1存放char类型组合的字符串,a本身是字符,故array_1是char *类型
指针数组: array_2存放的是字符串首元素地址,也就是A的地址; array_2存放char类型组合的字符串,A本身是字符,array_2本身是char *类型
*/
// 此下以array_1和指针说明:?
char *p = array_1 ; // char * 指针p指向array_1数组,不是指向array_1
char ** q = &p ; // ok ; q是指向指针p的指针,p是指向数组的指针;p本质是指针,所以q可以指向p
//char ** q = &array_1 ; // ERROR ; array_1是数组名,虽然也是char *类型,但是本质是数组变量
char (*a)[6] =&array_1; // (*a)是一个指针有6个元素,每个元素为char型。也就是a指向的对象是有6个char元素的数组,即a是指向一维数组的指针。
printf("%c\n", *(*a));
printf("%c\n", *(*q));
printf("%s\n", *a);
printf("%s\n", *q);
return 0;
}在VC++6.0的输出结果是:
------------------------------------------------------------------
a
abcde
A
ABCDE
a
a
abcde
abcde
————————————————————————————
相关文章推荐
- 理解 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
- 指针数组和数组指针的区别
- 数组指针与指针数组
- go语言:数组指针与指针数组
- 关于指针数组和数组指针的浅谈
- 数组指针与指针数组
- 校招笔试复习——指针数组与数组指针
- 指针数组与数组指针
- 指针数组和数组指针的详细解答
- 指针数组和数组指针的区别
- 数组指针和指针数组以及二维数组的函数间传递与返回
- c语言指针数组与数组指针
- c/c++(疑4) 指针数组和数组指针之间关系
- 指针数组与数组指针的区别
- 数组指针 指针数组
- 指针数组和数组指针的区别
- 指针数组和数组指针的区别
- 使用快速排序算法对字符串数组进行排序(复习指向指针的指针以及指针数组的使用)
- 指针,数组,数组指针,指针数组
- 指针数组和数组指针的区别