c++ 字符串数组长度排序_C指针和字符串数组
題目
下面這段代碼輸出什么?
先別急著百度,先想先這個代碼可能輸出什么,一不小心你就失去了自主學(xué)習(xí)的機會了。
#include<stdio.h> #include<stdlib.h> int main() {char *a[] = { "work", "at", "alibaba" };char **pa = a;pa++;printf("%sn", *pa);system("pause");return 0; }我們分析分析
a是一個數(shù)組,這個數(shù)組存的類型是 char * 類型,所以是這個樣子的。
pa 是一個二級指針變量,這個指針變量的初始化地址的 a 的首元素的地址,所以pa的值和 &a[0]是一樣的。
pa 是一個指針變量,pa 初始化的是 &a[0] ,也就是這個數(shù)組的首地址。
感覺有人還不是很理解這個東西,pa 存在的是 a[0] 的地址,所以通過 * 這個鑰匙就可以拿到 pa里面的東西,a[0] 里面的東西是什么類型的?看 a的定義我們可以知道,里面存的是 char * 字符串。
print("%sn",*pa);應(yīng)該輸出的是 “work”字符串。
但是呢,題目里面對 pa進行了自加運算,那 pa 存的地址就不是這個了。
這個 pa++ 我們應(yīng)該如何去理解,或者它本來就應(yīng)該進行什么運算呢?
pa++
pa 是什么?
pa 是一個指針變量。
pa 的類型是什么?
pa 的類型是 char ** 類型,就是二級指針變量,也就是他存的是指針變量的地址。
所以正常是這樣使用
#include<stdio.h> #include<stdlib.h> int main() {char *p = "weiqifa";char **pa = &p;printf("%sn",*pa);return 0; }回到上面的代碼,pa既然是指針變量,**那么pa++就是指向這個指針變量的下一個元素的地址**。
舉個例子說指針
#include<stdio.h> #include<stdlib.h> int main() {char a = 'p';char *p = &a;char **p1 = &p;char ***p2 = &p1;char ****p3 = &p2;char *****p4 = &p3;char ******p5 = &p4;*&a = '3';printf("%c %c %cn",***p2,******p5,a);system("pause");return 0; }* a是一個別名,這個別名代表一個地址,這個地址里面存的是一個字符 ‘p’
* p因為它的前面有一個 * 所以 p是一個指針變量,它存的是東西是地址,它存的這個地址里面存的是一個 char 。
* p1 因為它前面有一個 * 所以 p1 是一個指針變量,它存的是東西是地址,它存的這個地址里面存的是一個char *
* p2 因為它前面有一個 * 所以 p2 是一個指針變量,它存的是東西是地址,它存的這個地址里面存的是一個char * *
* p3 因為它前面有一個 * 所以 p3 是一個指針變量,它存的是東西是地址,它存的這個地址里面存的是一個char * * *
* p4 因為它前面有一個 * 所以 p4 是一個指針變量,它存的是東西是地址,它存的這個地址里面存的是一個char * * * *
* p5 因為它前面有一個 * 所以 p5 是一個指針變量,它存的是東西是地址,它存的這個地址里面存的是一個char * * * * *
我們分析下 char * * * * * 這個是什么?
這個是一個類型,也可以是說明屬性,在漢語里面,可以理解為形容詞,形容詞后面如果沒有名詞,是沒有意義的。
就比如說 「我非常」,主謂賓,沒有后面的一個詞來輔助,它沒有意義。
char * * * * * 也是一樣,它后面需要加一個東西,應(yīng)該是后面需要加一個地址,指明這個地址是干什么的。
比如 char * * * * * pt
總結(jié)
以上是生活随笔為你收集整理的c++ 字符串数组长度排序_C指针和字符串数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10上wsl位置迁移_wsl的安装/升级
- 下一篇: 小数向上_【实操技巧】社保计算方法:向上