c - 使用 const 代替变量声明的空指针

标签 c arrays variables constants shuffle

我有一个无法解决的问题。我编写了这段代码来打乱数组的元素:

#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/

相关文章:

c - 如何用assert实现C宏

c++ - extern const char* const pointer 或 extern const char array[] 导致链接错误

c - 在 C 中,如何删除 char 数组中相同且连续的行?

php - php和javascript中的双数组问题

c - 使指针指向整数而不进行强制转换

javascript - 在回调中定义后全局变量不在范围内?

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

VBA-范围内的变量,在公式内

c++ - C++中vtable查找的性能影响

php - 如何让 mySQL 返回分组在多个 "tiers"中的数据