您可以在指向数组的指针中打印内容吗?

时间:2018-10-18 06:03:12

标签: c arrays pointers

我正在我的一张演讲幻灯片中使用此代码,我的问题之一是在打印数组时,为什么我们不能使用指针而不是仅打印“ a”,所以在打印的最后一行声明

printf("\n message after decryption: %s\n", a);    

我不明白为什么我们不能使用指针来打印数组。有人可以向我解释为什么不能这样做吗?

printf("\n message after decryption: %s\n", *q);  

#include <stdio.h>
#define NUM 78

int main()
{
   int i = 0;
   char a[] = "Hello CSE 240";
   printf("\n message: %s\n ", a);
   while(a[i] != '\0'){a[i] = *(a+i)+1;i++;}
   printf("\n message after encryption: %s\n ", a);
   char *q = a;
   while(*q != '\0'){*q = *q-1;q++;}
   printf("\n message after decryption: %s\n", a);
}

2 个答案:

答案 0 :(得分:0)

您想在q修改循环之后打印出数组的内容,但是在所有增量之后它都指向空终止字符,即'\0'-因此在其中使用q printf仅会打印-message after decryption:-修改后的数组/字符串将不会打印。

要使用q进行此操作,您需要在while循环结束后将q分配给数组的第一个元素:q=a

然后此语句将按您希望的方式工作:

printf("\n message after decryption: %s\n", q);

最好使用适当的格式说明符更改打印语句。

答案 1 :(得分:0)

 #include <stdio.h>
 #define NUM 78

 int main()
 {
     int i = 0;  
     char a[] = "Hello CSE 240";
     printf("\n message: %s\n ", a);

     while(a[i] != '\0'){a[i] = *(a+i)+1;i++;}
     printf("\n message after encryption: %s\n ", a);

     char *q = a;

     while(*q != '\0'){*q = *q-1;q++;
     //decrypting the value of a 
     }//end of this is pointing to null

     q=a;//repointing to point a     
     printf("\n message after decryption: %c\n", *q);//H is printed
     printf("\n message after decryption: %s\n", q);//Hello CSE 240 is printed 

 }