【发布时间】:2019-11-13 03:46:34
【问题描述】:
int main(){
int i;
char *names[]={"pankaj",
"anshul",
"dheeraj",
"rahul"
};
for(i=0;i<4;i++)
printf("\n%u",names[i]);}
当我对此进行编码时,我发现所有字符串都以连续的方式排列。例如。如果names[0]=436,则names[1]=443,names[2]=450,names[3]=458,因此所有字符串都以连续方式分配内存,其中\0作为字符。 但是字符串可以在任何地方分配内存,并且它们的基地址存储在指向这些字符串的指针数组中。不应该是这样吗? 此外,声明的数组中这些指针的基本类型是什么?它们是 指向 char 的指针还是 指向字符串的指针。**就像这些 **char(*p)[6] 类型的指针数组或 数组char *p 类型的指针。 我们可以使用这个名称数组来处理整个字符串,例如:
int main()
{
char *names[]={"pankaj",
"anshul",
"dheeraj",
"rahul"
};
char *temp;
printf("Original:%s%s\n",names[2]names[3]);
temp=names[2];
names[2]=names[3];
names[3]=temp;
printf("New:%s%s",names[2],names[3]);
return 0;
}
在这种情况下,我可以通过交换指针数组字符串的基地址来反转 dheeraj 和 rahul (作为一个整体)字符串的位置。 通过它看起来指针是 pointer to string 类型,即指针指向整个字符串,而不是仅指向字符串的第一个字符。 因此,如果它们不是指向字符串的指针,而只是指向 char 的指针;指向它们各自字符串的第一个字符,我们如何通过仅交换指针数组中 dheeraj 和 rahul 的基地址来交换整个字符串。
【问题讨论】:
-
你需要明白几件事: (1) C 并没有真正的“字符串”类型; C 使用
char的数组模拟字符串。 (2) C 中的数组和指针之间存在非常密切的关系,因此每当我们使用数组时,我们经常使用指针来这样做。 (3) 没有“指向字符串的指针”这样的东西。 (4) 尽管字符串在内部表示为char的数组,但由于数组和指针之间的密切关系,我们经常使用指向char或char *的指针来引用字符串。 -
那么问题是什么?