首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >访问C中指针数组值的2种方法

访问C中指针数组值的2种方法
EN

Stack Overflow用户
提问于 2016-08-01 14:07:15
回答 4查看 7.1K关注 0票数 5

第一个街区

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>

const int MAX = 3;

int main() {

    int  var[] = { 10, 100, 200 };
    int i, *ptr[MAX];

    for (i = 0; i < MAX; i++) {
        ptr[i] = &var[i]; /* assign the address of integer. */
    }

    for (i = 0; i < MAX; i++) {
        printf("Value of var[%d] = %d\n", i, *ptr[i]);
    }

    return 0;
}

易于理解,因为ptr是一个int指针数组。因此,当您需要访问i-th元素时,您需要取消引用它作为*ptr[i]的值。

现在是第二个块,完全相同,但是现在它指向一个char指针数组:

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>

const int MAX = 4;

int main() {

    char *names[] = {
        "Zara Ali",
        "Hina Ali",
        "Nuha Ali",
        "Sara Ali",
    };

    int i = 0;

    for (i = 0; i < MAX; i++) {
        printf("Value of names[%d] = %s\n", i, names[i]);
    }

    return 0;
}

这一次,当我们需要访问它的元素时,为什么不首先添加一个*呢?

我试图形成一个正确的语句来打印这个值,似乎如果你取消引用,它将是一个字符。为什么?

代码语言:javascript
代码运行次数:0
运行
复制
printf("%c", *names[1]) // Z

我知道C中没有字符串,而且它是一个char数组。我知道指针,但这里的语法仍然不懂。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-01 14:09:35

对于具有printf()格式说明符的%s,引用C11,第7.21.6.1章

s 如果不存在l长度修饰符,则参数应该是指向字符类型数组的初始元素的指针。..。

在你的情况下

代码语言:javascript
代码运行次数:0
运行
复制
 printf("Value of names[%d] = %s\n", i, names[i] );

names[i] 是指针,这是%s所要求的。这就是为什么,你不能取消引用指针。

FWIW,

  • %c需要一个int类型参数(转换为无符号字符),因此您需要取消引用指针以获得值。
  • %d还需要一个int参数,所以您必须继续并取消引用指针,正如问题中提到的那样。
票数 2
EN

Stack Overflow用户

发布于 2016-08-01 14:11:18

%d转换说明符期望其相应的参数具有int类型;ptr[i]具有int *类型,因此取消引用是必要的。

%s转换说明符期望其相应的参数具有char *类型;即指向char的指针。所以names[i]已经是正确的类型了。%s说明符告诉printf打印从给定位置开始的字符序列,直到看到字符串终止符为止。

票数 1
EN

Stack Overflow用户

发布于 2016-08-01 14:21:01

如果要打印每个char数组的第一个字符,则在第二个示例中使用相同的语法。

代码语言:javascript
代码运行次数:0
运行
复制
    printf("Value of names[%d] = %c\n", i, *names[i]);

但是,由于要打印C字符串,所以要传递names数组元素的值,这些元素的类型为char *

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38700986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档