我有一个无法解决的问题。我编写了这段代码来打乱数组的元素:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const char *array[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
int main(int argc, char **argv)
{
int i, tmp, randomize, size;
size = sizeof(array)/sizeof(*array);
srand(time(NULL));
for(i=size;i>0;i--){
randomize=0+(rand()%size);
tmp=(int)array[i];
array[i]=array[randomize];
array[randomize]=(char*)tmp;
}
for(i=0;i<size;i++)
printf("%s", array[i]);
return 0;
}
当我运行该程序时,这是 ioutput:
azlngiwexbv(null)uscphqjyrodmtk
我无法理解为什么指针有时为空,我无法理解为什么,这样改变源代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char **argv)
{
char *array[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
int i, tmp, randomize, size;
size = sizeof(array)/sizeof(*array);
srand(time(NULL));
for(i=size;i>0;i--){
randomize=0+(rand()%size);
tmp=(int)array[i];
array[i]=array[randomize];
array[randomize]=(char*)tmp;
}
for(i=0;i<size;i++)
printf("%s", array[i]);
return 0;
}
一切正常。 谢谢。
最佳答案
从size-1
开始循环,您指向array[size]
中的数组(第一次循环迭代)。
for (i=size-1; i>=0; i--)
关于c - 使用 const 代替变量声明的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41363036/