指针数组和数组指针的使用

本文详细解析了指针数组和数组指针的概念,并通过实例展示了它们在C语言中的具体用法。重点介绍了如何通过类型变换简化指针数组的定义过程,以及如何在实际代码中灵活运用这两种数据结构。

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

数组指针:a pointer to an array,即指向数组的指针

还要注意的是他们用法的区别,下面举例说明。

int* a[4]     指针数组     

                 表示:数组a中的元素都为int型指针    

                 元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*

int (*a)[4]   数组指针     

                 表示:指向数组a的指针

                 元素表示:(*a)[i]  

注意:在实际应用中,对于指针数组,我们经常这样使用:

typedef int* pInt;pInt a[4];

这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。

 

我的代码

#include<stdio.h>
char a[]="hello world";
char b[]="ko ??";
char c[]="nice one day!!";
char *d[]={a,b,c}; //指针数组
char (*e)[10];     //数组指针
char array[][10]={
"hello ??#",        //字符串在二维数组里的存储
"nice  !!!",
"wujing ok",
};
void main()
{

   //e=&a;
// e=&b;
 e=&array[1];  //给数组指针赋值
 printf("%s\n",d[2]);
 printf("%s\n",*e);
}

在C++中,指针数组数组指针是两个不同的概念,以下分别介绍它们的使用方法: ### 指针数组 指针数组数组元素全为指针变量的数组数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量,其本质为数组,格式为:数据类型 *首地址[] [^1]。 示例代码如下: ```cpp #include <iostream> int main() { int a = 1, b = 2, c = 3; // 定义一个指针数组 int *p[3] = {&a, &b, &c}; for (int i = 0; i < 3; i++) { std::cout << "Value at index " << i << ": " << *p[i] << std::endl; } return 0; } ``` 在上述代码中,定义了一个指针数组`p`,它包含3个元素,每个元素都是指向`int`类型的指针。通过循环可以访问每个指针所指向的值。 指针数组还可以字符串结合使用,示例如下: ```cpp #include <iostream> int main() { const char *names[] = {"Alice", "Bob", "Charlie"}; for (int i = 0; i < 3; i++) { std::cout << "Name at index " << i << ": " << names[i] << std::endl; } return 0; } ``` 这里`names`是一个指针数组,每个元素都是指向`const char`类型的指针,实际上指向了不同的字符串常量。 ### 数组指针 `(*p)[n]`表示数组指针,`p`先`*`结合,表示一个指针,然后这个指针`[n]`结合,即指向一个长度为`n`的数组 [^2]。 示例代码如下: ```cpp #include <iostream> int main() { int arr[3] = {1, 2, 3}; // 定义一个数组指针 int (*p)[3] = &arr; for (int i = 0; i < 3; i++) { std::cout << "Value at index " << i << ": " << (*p)[i] << std::endl; } return 0; } ``` 在上述代码中,定义了一个数组`arr`,然后定义了一个数组指针`p`,并让它指向`arr`。通过`(*p)[i]`可以访问数组中的元素。 对于二维数组数组指针使用示例如下: ```cpp #include <iostream> int main() { int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 定义一个指向包含3个元素的数组指针 int (*p)[3] = arr; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { std::cout << "Value at [" << i << "][" << j << "]: " << p[i][j] << std::endl; } } return 0; } ``` 这里`p`是一个数组指针,指向一个包含3个元素的数组,通过`p[i][j]`可以访问二维数组中的元素。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值