嵌入式每日八股2.9
数组指针和指针数组有什么区别?
数组指针
数组指针就是指向数组的指针,它表示的是一个指针,这个指针指向的是一个数组,它的重点是指针。 例如,int(*pa)[8]
声明了一个指针,该指针指向了一个有8个int型元素的数组。下面给出一个数组指针的示例。
数组指针也称指向一维数组的指针,亦称行指针。
#include <stdio.h>
#include <stdlib.h>
void main() {
int b[12]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4];
p = b; //(好像不对)
printf("%d\n", **(++p);
}
程序的输出结果为 5。
上例中,p是一个数组指针,它指向一个包含有4个int类型数组的指针,刚开始p被初始化为指向数组b 的首地址,++p相当于把p所指向的地址向后移动4个int所占用的空间,此时p指向数组{5,6,7,8},语句 *(++p);表示的是这个数组中第一个元素的地址(可以理解p为指向二维数组的指针,{1,2,3,4},
{5,6,7,8},{9,10,11,12}。p指向的就是{1,2,3,4}的地址,*p 就是指向元素,{1,2,3,4},**p 指向的就是1),语句**(++p)会输出这个数组的第一个元素5。
指针数组
指针数组表示的是一个数组,而数组中的元素是指针。
如命令行参数
#include <stdio.h>
//argc: 命令行参数个数
//argv: 用指针数组存储参数,第一个是执行文件的名字(a.out)
int main(int argc, char *argv[])
{
int i;
for (i = 1; i < argc; i++){
printf("%s ", argv[i]);
}
printf("\n");
return 0;
}
$ gcc main.c
$ ./a.out hello world //argc就是a.out argv是后面的参数
又如
char *arr[4] = {"hello", "world", "shannxi", "xian"};
//arr就是我定义的一个指针数组,它有四个元素,每个元素是一个char *类型的指针,这些指针存放着其对应字符串的首地址。
【嵌入式八股】精华版(免费216问精华八股) https://www.nowcoder.com/creation/manager/columnDetail/0rOeJm
【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM
【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym
【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM
【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0