#include <stdio.h>
int main(void)
{
char* string_p = "48430";
printf("%c\n", *string_p++);
printf("%c\n", string_p[1]);
return 0;
}
這段代碼輸出是這樣的
4
4
有大佬解釋一下是為什么嗎?
uj5u.com熱心網友回復:
String_p是一個字串陣列的名稱 = 第一個字符的地址,所以*string_p == 4 ,又因為后面有++,所以字符陣列指標后移,string_p[0] = 8,所以 string_p[1] = 4
uj5u.com熱心網友回復:
這個其實就是指標的使用了 多去看看指標的定義吧char* string_p = "48430"; //此時 指標指向字串的首地址,也即字串首個字符的地址 該地址的值是'4' 即此時*string_p=4
printf("%c\n", *string_p++); //* 和后置++優先級是一樣的,但是他們的結合順序是自右向左的 所以先執行的的string_p++,string_p指向下一個值得地址,*string_p 取值為4
printf("%c\n", string_p[1]); //剛才的string_p自增了 此時string_p指向的'8' string_p[1]表示之后的第2個字符 也就是4 是8后面的4
uj5u.com熱心網友回復:
printf("%c\n", *string_p++);
printf("%c\n", string_p[1]);第一個printf是因為++后后增,因此是先求運算式的值,即(*string_p++),然后自增string_p指標,指向'8'的地址,
第二個是在第一個基礎上的,因此string_p[0]是'8',string_p[1]即'4'了。
uj5u.com熱心網友回復:
A[B]
*(A+B)
*(B+A)
B[A]
//以上四行等價
"abc"[1]
*("abc"+1)
*(1+"abc")
1["abc"]
//以上四行等價
A[0]
*(A)
0[A]
//以上三行等價
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/200429.html
標籤:C語言
上一篇:關于C++2017最新國際標準的核心概念及重點難點視頻?
下一篇:c++有參建構式和拷貝建構式
