c語言中變數指標輸出問題,C語言中變數指標輸出問題

2021-04-02 12:48:08 字數 2245 閱讀 3873

1樓:匿名使用者

這和printf用%s的規則相關。

首先ps是一個指向字元型資料的指標;printf用%s修飾輸出時需要提供一個指標,這個指標指向的資料是字元型的,但printf將按照字串的規則來進行輸出,也就是輸出完這個指標指向的字元後,自動將指標加1,並判斷指向的字元是否為0,否則將輸出直至指向的資料為0為止,或者說找到字串結束標誌為止。

所以我們說,如果用%s修飾輸出是輸出字串,printf("%s\n",ps);,這句話要求提供一個指標

而要輸出單個字元的話應當用printf("%c\n",*ps);這時要求提供一個字元型資料,用*ps表示ps指向的字元資料正好。

2樓:

假設字串"this is a book"的地址分佈如下:

值 地址

t 0030f8b0h 0030f8b1i 0030f8b2... ...

此時有char *ps="this is a book"; 由於ps是char型別指標變數,它的指標域只能儲存地址,我們知道"this is a book"是一個字串陣列且拿到了首元素的地址就可以找到它整個字串,所以ps的指標域儲存了首字元的地址即t的地址0030f8b0,而格式輸出符%s,就是輸出字串之意,即從t開始輸出直至遇到\0符為止。

如果有printf("%c\n",*ps); 則取ps所指向的地址0030f8b0的值即字元t,換句說就是ps代表指標域即地址0030f8b0,再加上「*」就是取值的意思,合起來就是取地址0030f8b0的值即字元t.

3樓:匿名使用者

printf()函式是一個可變引數的函式 編譯時它根本不知道它需要多少個引數(必須一個以上) 和引數的型別 只能在執行時確定 如何確定? 第一個引數灰常重要(char *) 它定義了後面接著多少個引數 和引數型別,printf函式通過分析字串 是否含有 %c %s 這些內容 就可以知道後面的引數個數和型別

%s 表示引數是char* 型別的 也就是一個字串的首地址 對 它只得到一個開始的地址 它沒有結束得到的地址 那printf如何確定字元在**結束(或者它有多少長?) 答案顯而易見 字串後面的0

當然你可以不傳入一個地址

printf("%s",10);

10不是一個有效的地址 printf知道它是有效還是沒有效的嗎? 它不知道 它只能傻傻地去訪問10這個地址 最終程式崩潰退出

printf("%s",",*ps);

傳遞給printf的是什麼? ps裡面的值! printf分析第一個引數的知道它需要一個char* 型別的引數

把ps的值看成是地址 而去訪問ps的值表示的地址(ps裡如果是'a' 對應的65這個地址)

地址非法 當然報錯退出

4樓:匿名使用者

ps的值就是字串首地址,如果用*ps只表示第一個字元。另外printf 、scanf等函式內部都支援字串,所以不必在費心考慮取地址還是取值問題。

5樓:匿名使用者

注意printf的引數。

6樓:匿名使用者

32位windows記憶體地址採用平坦結構,記憶體地址都是32位整數,而指標變數的實質就是記憶體地址。所以,不管哪一種型別的指標變數都是4個位元組大小。

7樓:匿名使用者

樓主理解的對,ps就是代表變數的地址 *ps代表ps指向的地址空間存放的值

c語言中指標的輸入輸出問題 求解答

8樓:匿名使用者

scanf()與printf()實際是兩個庫函式,它們在標頭檔案裡已經被寫好了!scanf()需要兩引數,一個為字元型的表示輸入格式,另一個為指標或地址,它應該指向你所要儲存變數的地址!而printf()需要一個字元型引數,表輸出的資料和格式,後面要跟上輸出列表,後面的列表應該為具體的變數值,而不是指標或地址!

*p值指的是p所指的具體變數!而p是指指標,也就是p所指的變數的地址!所以他們不能亂用,現在應該明白了吧!

就像一個max(int a,int b)函式 他需要兩個int 引數如果你給她別的資料,那肯定就是錯誤的了!

9樓:須憶象駿

第四行的指標變數p是不可以輸入的,是由系統分配的。而在第11行的指標就是p在和陣列的指標比較,但我認為這樣寫不好,你可以定int變數來控制迴圈的次數,這樣就不用指標變數了。

c語言中的指標有什麼意義,C語言中的指標有什麼意義

寫簡單的程式的話不用指標也行了吧.比如這裡a是一個地址 編譯後 為了讀寫這個地址單元裡的東西,可以用p,也可以用一般變數a.對於指標的便利,我現在能想到的,可能是 函式a呼叫函式b時,把一個記憶體塊的地址傳遞過去,這樣可以避免按值傳遞時開闢一個棧空間並逐一拷貝記憶體塊裡的值的開銷 c 裡的拷貝建構函...

C語言中static變數的賦值問題

static int a 0 執行期時初始化一次,下次再呼叫時,不進行初始化工作如下 printf d a a int main staticlocalvar 第一次呼叫,輸出a 0 staticlocalvar 第二次呼叫,記憶了第一次退出時的值,輸出a 1 return 0 擴充套件資料 1 s...

C語言檔案指標,C語言中通過檔案指標訪問檔案有什麼好處?

你還沒解決嗎?你的bug應該不是檔案方式的問題。我才起來給你除錯,應該是 這一句的問題 fp1是檔案指標,fopen s函式返回的值型別是errno t 也就是int型別的值,因fp1錯誤的使用,而接受了fopen s函式的返回值,此時fp1指標的值變成0x0000000d fopen s函式的返回...