c语言指针数组问题,高手请帮忙

来源:百度知道 编辑:UC知道 时间:2024/06/21 09:14:01
初始化一个指针数组
char *name[ ]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"}
可当运行 for(int n=0;n<5;n++)
printf("%s\n",name[n]);
会输出上述的那些字符串
而当运行for(int n=0;n<5;n++)
printf("%d\n",name[n]);
则输出的是用10进制表示的地址代码
怎么会有这中情况
指针数组的每个元素不是一个指针变量吗?怎么还可以输出字符串
而且在主函数中函数
void sort(char *name[ ],int n)
{char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0) k=j;
if(k!=i)
{temp=name[i]; name[i]=name[k]; name[k]=temp;}
}
可以正常被引用,这又是什么原理?

首先你要明白指针到底是啥东西,还有在计算机内部计算机是只认识010101代码的,所以不管内存中存放的是地址,整数,字符,都会最终以01的二进制代码表示。如果给定内存的某字节的值是01000001 那么它到底是多少?我们不知道,如果说它是整数,那么其值是65,如果是字符其值是'A',如果是指针,其代表的是指向编号为0x41的内存单元。所以说在内存单元中的值,我们可以以不同的意义去提取,应该说是编码。。 这就是这个意思。

那么对于一个指针变量:
int a=10;
int *p=&a;
printf("%d",p);当我们以整型格式输出其值的时候,会输出其内存地址值。
如果我们以printf("%s",p);会将p单作是某字符串的起始地址,此时会输出从p地址开始,知道遇到\0结束符为止,这之间的所有字符。这是printf()函数的功能。

你的问题很好,值得大家学习
没错,name[n]是个指针,指向某一个字符串的地址。请注意printf函数,%s要求的第二个参数是地址,name[n]恰好给出了该字符串的地址;而%d要求的第二个参数是变量名,name[n]正是这个指针的变量名,指针是4字节的int型。strcmp要求的参数是两个char型指针,name[k],name[j]满足这个条件。还有问题吗?

没有什么原理,一个数据可以以不同的方式去解释其含义,比如0x12345678,你可以认为是一个地址,一个指针,一个整数,甚至是一个字符串。%s的含义就是告诉程序,把指针解释为字符串指针,%d就是告诉程序,把指针当做一个整数。