本文目錄一覽:
- 1、c語言 int *p=5 是啥意思。 是p的地址是5。還是*p的值為5
- 2、*–p執行之後p指向的內存單元被改變了嗎?為什麼
- 3、c語言程序。
- 4、用c語言寫歸併排序是遇到的奇葩問題
- 5、【C語言】程序奇葩問題。。求解答。。已編譯
- 6、C語言二級指針奇葩問題
c語言 int *p=5 是啥意思。 是p的地址是5。還是*p的值為5
你的問題問得很好,這是初學者常困擾的地方。
外形一樣的東西,在聲明裡 和 在語句里 意思 可能不同,這是 C 語言奇葩 之一,常困擾初學者的地方。
int *p=5; 這是聲明。聲明裡 *p 只是表示 聲明 p 是指針。 *p=5 叫初始化。
但這樣的初始化方法是錯誤的!指針 初始化 要給 地址,不能給值。
聲明裡,正確寫法如下:
int a=4;
int *p=a;
這樣才對。int *p=a; 聲明 p 是指針,初始化 給 變量a 的地址。
語句里 可以寫:
*p =5; 這是賦值語句,語句里 *p 表示指針指向的值,賦5。
語句里 可以寫:
p = b; 語句里 沒星號的 p 表示指針指向的地址,賦 變量b 的地址。
所以要分清 是聲明 還是 語句。
*–p執行之後p指向的內存單元被改變了嗎?為什麼
前綴 — 優先級高於 *. 按規定,表達式中有前綴–時,要先執行減1再計算表達式的值。
所以 *–p 要分解為 2步。 求地址 p=p-1, 再取值 *p。
p指向的內存單元被改變了嗎? p指向的內存單元 通常 在遇到分號後 改變。
例如:
int a[]={1,3,5,7,9}, *p;
p= a[2];
printf(“%d %d\n”, *–p, *p); //這裡 *p 指向未變 輸出 3,5
printf(“%d\n”, *p); //這裡 *p變了。
也有複雜情況,下面是c語言奇葩:
p= a[2];
printf(“%d %d %d\n”,*p,*–p, *p); 前一個*p變了,後一個*p沒變。輸出 3 3 5.
所以要避免用 *–p 這類東西。
c語言程序。
這代碼太奇葩了:自定義函數是min,調用時卻用的是max,輸出也是maxmum。由於max沒有被聲明,編譯器不認識,自然要出未定義錯誤。把c=max(a,b);改成c=min(a,b);,把maxmum換成minmum就可以了。(maxmum可以不換,那只是提示,不影響正確執行)。
用c語言寫歸併排序是遇到的奇葩問題
你那兩行
L1[n1+1] = MAX_INTEGER;
L2[n2+1] = MAX_INTEGER;
數組訪問出界了。改為
L1[n1] = MAX_INTEGER;
L2[n2] = MAX_INTEGER;
就可以了。原因應該不用我多說了。樓主應該加賞,且不說我花了不少時間幫你排錯,就你那不問性別概稱大嬸也該自罰,:)
【C語言】程序奇葩問題。。求解答。。已編譯
strcpy函數執行後,str3的內容會被str2的內容給覆蓋……再有,你最後沒有給讀入的字符串加上‘\0’(因為你是循環讀入的)其實直接用兩個gets就行了……
c語言中比較是否相等要用“==”,不是‘=’。
供參考:
#includestdio.h
#includestring.h
int main(void)
{
char str1[100],str2[100],str3[100],c;
int i,j,k,l,n;
printf(“字符串操作函數聯繫程序—001\n”);
printf(“請輸入字符串1和字符串2。。。程序將進行比較!\n”);
printf(“請輸入字符為str1賦值:”);gets(str1);
printf(“請輸入字符為str2賦值:”);gets(str2);
sprintf(str3,”%s%s”,str1,str2);
printf(“兩字符串相接後為:%s\n”,str3);//printf想輸出後面的整個字符串,用%c合適嗎?buheshi
k=strcmp(str1,str2);
printf(“k等於%d\n”,k);
if(k0)
{
printf(“str1大於str2的ascii碼”);
}
else if(k0)
{
printf(“str1小於str2的ascii碼”);
}
else if(k==0)
{
printf(“兩個字符串相等”);
}
getchar();
return 0;
}
C語言二級指針奇葩問題
很正確啊,看下面兩句就應該清楚了吧?注意p是二級指針,並不直接指向{W…}
str[2]= p[1] + 3;//這時p[0]指向str[2],p[1]指向str[3],即最終內容是Nanjing;p[1] + 3最終內容就是jing;你把str[2]通過執行p[1] + 3指向了jing,而p[0]是指向str[2]的;由於*p就是p[0],printf(“*p=%s\n”,*p);就是printf(“*p=%s\n”,p[0]);,也就是printf(“*p=%s\n”,str[2]);,不輸出jing還能輸出什麼呢?所以一點也不奇葩!
原創文章,作者:WCRC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/149864.html