gpt4 book ai didi

c - 为什么我的 char* 数组中的元素是两个字节而不是四个字节? :

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:06 25 4
gpt4 key购买 nike

我是 C 的新手,如果这个问题很简单,请原谅我。我试图反转一个字符串,在我的情况是字母 a、b、c、d。我将字符放在一个 char* 数组中,并声明一个缓冲区它将以相反的顺序保存字符,d、c、b、a。我使用实现了这个结果指针算法,但据我所知,char* 数组中的每个元素都是 4 个字节,所以当我执行以下操作时:buffer[i] = *(char**)letters + 4; 我应该指向数组中的第二个元素。它不是指向第二个元素,而是指向第三个元素。经过进一步检查,我发现如果我将基指针增加两个每次我都会得到想要的结果。这是否意味着数组中的每个元素是两个字节而不是 4 个字节?这是我的其余代码:

#include <stdio.h>

int main(void)
{

char *letters[] = {"a","b","c","d"};
char *buffer[4];
int i, add = 6;

for( i = 0 ; i < 4 ; i++ )
{
buffer[i] = *(char**)letters + add;
add -= 2;
}

printf("The alphabet: ");

for(i = 0; i < 4; i++)
{
printf("%s",letters[i]);
}

printf("\n");

printf("The alphabet in reverse: ");

for(i = 0; i < 4; i++)
{
printf("%s",buffer[i]);
}

printf("\n");

}

最佳答案

您不是在创建一个字符数组:您是在创建一个字符数组 strings —— 即,一个指向字符数组的指针数组。当然,我不会为您重写整个程序,但我将从两种可能的主要数据结构正确声明开始:

char letters[] = {'a','b','c','d, 0};

char * letters = "abcd";

其中任何一个都声明了一个包含五个字符的数组:a、b、c、d 后跟 0,这是 C 中字符串的传统结尾。

关于c - 为什么我的 char* 数组中的元素是两个字节而不是四个字节? :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5599089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com