iT邦幫忙

0

不知道是如何執行的

  • 分享至 

  • xImage

不知道粗體的部分是如何執行的,為什麼能印出整個字串,ptr(指標型別)不是等於&school[0]嗎?

#include <stdio.h>
void add10(char *ptr){
	while(*ptr!='\0'){
		*ptr=*ptr+10;
		ptr++;
	}
}
void display(char *ptr){
	**printf("%s\n",ptr);**
} 
int main(){
	char school[]="I^_^ 9^_[d Kd_1[hi_jo AWe^i_kd] 9Wcfki";
	char *ptr;
	ptr=school;
	add10(ptr);
	display(ptr);
	return 0;
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
海綿寶寶
iT邦大神 1 級 ‧ 2021-08-06 10:04:28
最佳解答

https://ithelp.ithome.com.tw/upload/images/20210806/20001787qvNmGswuim.png

為什麼能印出整個字串

因為 printf 就是「從傳入的指標開始印,一直印,印到 \0 才結束」
如果你想問「沒看到 \0 在那裡?」
就看這篇:使用兩個引號初始化,編譯器會自動在後面補’\0'(非常常用)

ptr(指標型別)不是等於&school[0]嗎?

1.是的, 除此之外 ptr 還等於 school
2.這是在「不執行 add10 那個 function」的前提之下

1
EN
iT邦好手 1 級 ‧ 2021-08-05 22:24:50

ptr 指標會指向 school 的第一個位置,丟進 printf() 後,該函式會把 buffer 的內容噴到 stdout 上面,直到讀到 null byte ('\0') 為止。

4
一級屠豬士
iT邦大師 1 級 ‧ 2021-08-05 22:50:31

學習過程需要思考,也需要資料. 可以善用 man
函數庫是 Section 3, printf 可以用 man 3 printf
或是參考以下網址
https://man7.org/linux/man-pages/man3/printf.3.html

你也可以試試看用 putchar(), 逐一列印出來看看.多試試.

我要發表回答

立即登入回答