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

本文通过一个C语言示例程序展示了如何使用指针来修改字符串数组中的元素,并解释了不同指针运算对字符串的影响。具体包括:初始化字符串数组、指针指向数组元素、通过指针修改字符串内容等关键步骤。

看程序写输出:

#include<stdio.h>


int main ()
{
char *str[] = {"welcome","to","Fortemedia","Nanjing"};
char **p = str+1;                               // p指向 to;
str[0] = (*p++)+2;                            // 先*p 指向t 再+2,指向‘\0’,str[0] = NULL;  p+1,指向Fortemedia
str[1] = *(p+1);                                 // p+1 , p 指向 Nanjing
str[2] = p[1]+3;                                // p指向jing
str[3] = p[0]+(str[2]-str[1]);             // str[2] - str[1] = 3, p[0] = j,  指向g

printf("%s\n",str[0]);                        // NULL
printf("%s\n",str[1]);                        // Nanjing
printf("%s\n",str[2]);                        // jing
printf("%s\n",str[3]);                        // g
return 0; 
}



在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]`可以访问二维数组中的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值