我竭力要了解這部分的意思是:什麼!s || !*的意思? (S是char *)
if (!s || !*s) //What is this?!?!
{
printf("\n");
return;
}
這是我的主要功能:
#include <conio.h>
#include <stdio.h>
#include <string.h>
void func1(char *s);
int main()
{
func1("SABABA");
return 0;
}
而且我FUNC1:
void func1(char *s)
{
int a, b, c;
if (!s || !*s)
{
printf("\n");
return;
}
b = strlen(s);
while (b>2)
{
a = 0;
if (s[a] == s[b - 1])
{
for (c = b - 1; c >= a && s[a] == s[c]; a++, c--);
if (c<a)
{
int i;
for (i = 0; i<b; i++)
printf("%c", s[i]);
printf(" ");
}
}
b--;
}
func1(s + 1);
}
我的意見:'s'表示字符串的地址,而!s表示當我們在字符串的「堆棧」之外。例如如果起始地址是1000並且字符串是6個字符,則我們以1006結束。如果我們超過1006,例如,到1007那麼它就會返回true。和* s,它檢查地址1000保存的值,即「S」,這是真的,意思是!* s是錯誤的。並且因爲我們知道每個字符串都以「/ 0」結尾,所以我想在1007處搜索那個。如果我是對的,那麼爲什麼我們需要兩個!s和* s,爲什麼不只是其中之一。我甚至得到這個對嗎?
在入門書上C.閱讀上的指針' !s'檢查's'不是空指針,'!* s'解引用's'並檢查它不指向NUL字符。 –
這些是可怕的變量和函數名稱! :D – mikeyq6
@ mikeyq6它來自測試。它只有7點,以確定此功能和它的輸出。我認爲他們在1997年寫了它。 –