我有這個編碼分配,我只能使用純指標表示法。我幾乎完成了它,但我剛剛意識到我使用了一個陣列。我不允許這樣做,除非我以某種方式將其更改為指標。這就是我有點卡住的地方。
這是我的代碼。
#include <stdio.h>
#include <stdlib.h>
/* Function Prototypes */
int main();
void s1(char *random);
void s2(char *s2_input, int index);
void strfilter(char *random, char *s2_input, char replacement);
int main()
{
for(;;)
{
int s1_index = 41;
char s1_random[s1_index];
s1(s1_random);
printf("\ns1 = ");
puts(s1_random);
printf("s2 = ");
int s2_index = 21;
char s2_input[s2_index];
s2(s2_input, s2_index);
if(s2_input[1] == '\0')
{
printf("Size too small");
exit(0);
}
if(s2_input[21] != '\0' )
{
printf("Size too big");
exit(0);
}
printf("ch = ");
int replacement = getchar();
if(replacement == EOF)
break;
while(getchar() != '\n');
printf("\n");
strfilter(s1_random, s2_input, replacement);
printf("\ns1 filtered = ");
puts(s1_random);
printf("Do you wish to run again? Yes(Y), No(N) ");
int run = getchar();
// or include ctype.h and do:
// run == EOF || toupper(run) == 'N'
if(run == EOF || run == 'N' || run == 'n')
break;
while(getchar() != '\n');
}
}
void s1(char *random)
{
int limit = 0;
char characters;
while((characters = (('A' (rand() % 26))))) /* random generator */
{
if(limit == 41)
{
*(random 41 - 1) = '\0';
break;
}
*(random limit) = characters;
limit ;
}
}
void s2(char *s2_input, int index)
{
char array[21] = "123456789012345678901"; /* populated array to make sure no random memory is made */
char input;
int count = 0;
int check = 0;
while((input = getchar() ))
{
if(input == '\n')
{
*(s2_input count) = '\0';
break;
}
else if(input < 65 || input > 90)
{
printf("invalid input");
exit(0);
}
*(s2_input count) = input;
count ;
}
index = count;
}
void strfilter(char *random, char *s2_input, char replacement) /* replacement function */
{
while(*s2_input)
{
char *temp = random;
while(*temp)
{
if(*temp == *s2_input)
*temp = replacement;
temp ;
}
s2_input ;
}
}
我的問題是這部分我不確定如何編輯它以不包含陣列,并且仍然以相同的方式輸出程式。
if(s2_input[1] == '\0')
{
printf("Size too small");
exit(0);
}
if(s2_input[21] != '\0' )
{
printf("Size too big");
exit(0);
}
我試圖在某個點獲取陣列的地址,然后用指標取消參考它,但它仍在使用陣列。這是我要避免的。任何幫助將不勝感激!
uj5u.com熱心網友回復:
s2_input[i]可以寫成*(s2_input i)where iis some index.
uj5u.com熱心網友回復:
if ((s2_input[1]) == '\0')
相當于:
if (*(s2 1) == '\0')
這意味著取消參考 s2 處的值(這是第 0 個 [0] 元素的位置),并向其加一。可以對任何其他位置進行相同的操作。
uj5u.com熱心網友回復:
指標表示法和通常被稱為變址表示法(使用[ ]下標運算子)的是完全等價的。任何一個概念都提供指標地址加上該指標地址的偏移量。請參閱C11 標準 - 6.5.2.1 陣列下標即array[offset]或*(array offset)1
例如,訪問第一個元素時使用*arrayis shorthand for *(array 0)which is simply array[0]in indexed notation。是原始指標地址的0偏移量(在該型別的元素中)。(型別控制指標演算法)
array[10]簡直就是如此*(array 10)。如果 array 是 type char,則在地址array[10]后 10 個位元組。array如果 array 是型別int(其中 anint是 4 位元組),則在地址 (10-int)之后array[10]是 40 位元組。array
對于二維陣列,表示法arr2d[1][2]可以簡單地表示為*(arr2d[1] 2)進一步擴展的簡單表示法*(*(arr2d 1) 2)。
所以一般array[i]是*(array i)和arr2d[i][j]是*(*(arr2d i) j)。
腳注:
- 由此得出
array[offset]等效于*(array offset)等效于offset[array]。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/536616.html
標籤:C
