c语言int转字符串_C语言零基础入门-指针-05
C語言零基礎(chǔ)入門-指針-05
本節(jié)要點:1,字符指針。
2,字符串指針。
3,指針的參數(shù)傳遞
4,多重指針
01. 字符指針
這里的定義與前面的基本一樣,所謂的字符指針就是這個指針指向的是一個字符型的變量。
01.1 單個字符
代碼如下:
#include#include<stdio.h>void main(){char a = 'A';char *p = &a;printf("%c ",*p); }- 首先定義了一個字符型變量a。
- 由于指針p將要指向的變量的字符類型的,所以指針變量p定義的時候前面的數(shù)據(jù)類型也是char。
02. 字符串指針
單個字符的指針與之前定義的int,float類似,都是一個數(shù)據(jù)。接下來說一下字符串的指針。
02.1 字符串定義的回顧
在學(xué)數(shù)據(jù)類型的時候我說過,C語言中沒有字符串,但是C語言的字符串可以使用數(shù)組模擬出來(并且C語言中提供了格式控制符 %s 來進(jìn)行字符串的輸出)
方法1:
#include<stdio.h>void main(){char str[] = {'1','2','3','4','5','0'};printf("%sn",str);printf("%cn",str[3]); }這種方式就是我們最常用的數(shù)組定義形式(至于為什么這種定義方法后面要加 0 可以去數(shù)組章節(jié)看看回顧一下)。
方法2:
這種方法其實原理與1一樣,只不過是這種方法比較簡寫,但是他的內(nèi)部原理還是用數(shù)組存放每一個元素。
#include<stdio.h>void main(){char str[] = "I LOVE CHINA!";printf("%sn",str);printf("%cn",str[3]); }- 首先定義了一個字符類型的數(shù)組str。
- 然后使用 %s 就可以輸出整個字符串了。
- 同樣由于這個字符串是使用數(shù)組模擬出來的,因此也可以使用數(shù)組的索引方式,用%c作為輸出的格式控制來輸出數(shù)組元素。
02.2 字符串指針
講函數(shù)的時候我們說過,把數(shù)組當(dāng)作參數(shù)傳遞的時候直接傳遞數(shù)組名就可以了,這是因為數(shù)組定義之后,數(shù)組名代表的就是整個數(shù)組的首地址。
具體使用看下邊的代碼:
#include<stdio.h>void main(){char str[] = "I LOVE CHINA!";char *p = &str[0];printf("%sn",p);printf("%cn",p[3]); }需要注意一點的就是:對于字符串的數(shù)據(jù)的輸出,前面不用加 * 。
其實這個就是個特殊規(guī)定,大家記住就好,因為很多常用的東西都會賦予許許多多的特殊規(guī)定的。
- 首先定義了一個字符串str。
- 然后讓指針變量指向str的首地址。
- 然后,直接把指針變量當(dāng)作數(shù)組名來使用就可以了。
03. 指針的參數(shù)傳遞
03.1
如果我們在main中把一個數(shù)據(jù)a傳入子函數(shù),然后在子函數(shù)中修改這個數(shù)據(jù),大家應(yīng)該能想到,main函數(shù)中的數(shù)據(jù)a是不會變的。程序如下:
#include<stdio.h>void change(char p){p = '6'; } void main(){char a = 'Y';printf("%cn",a);change(a);printf("%cn",a); }結(jié)果:
分析:
- 因為當(dāng)實參a作為參數(shù)傳遞的時候,形式參數(shù)p其實接收到的是a的數(shù)據(jù)而已(即相當(dāng)于把a的數(shù)據(jù)拷貝一份給p了)。
- 所以當(dāng)我們修改p的數(shù)據(jù)的時候,只是修改了p本身的數(shù)據(jù),而與a無關(guān)。
下邊我就演示一下怎樣使用指針的知識,在函數(shù)之間進(jìn)行參數(shù)的傳遞。
03.2 單個數(shù)據(jù)的傳遞
程序:
#include<stdio.h>void change(int *p){*p = 9; }void main(){int a = 6;int *p = &a;printf("%dn",a);change(p);printf("%dn",a); }結(jié)果:
分析:
內(nèi)存分析:
- 直接把數(shù)據(jù)a的地址傳給子函數(shù),然后子函數(shù)根據(jù)傳入的地址進(jìn)行修改地址中的數(shù)據(jù)。
03.3 數(shù)組數(shù)據(jù)的傳遞
與單個數(shù)據(jù)的傳遞類似,數(shù)組也是傳入地址,然后在子函數(shù)中修改某個地址上的數(shù)據(jù),就可以達(dá)到修改這個數(shù)組中的內(nèi)容的效果。
程序:
#include<stdio.h>void change(char *p){p[3] = '6'; }void main(){char str[] = "I LOVE CHINA!";char *p = &str[0];printf("%sn",p);change(p);printf("%sn",p); }結(jié)果:
分析:
- 將數(shù)組str的首地址傳入子函數(shù)。
- 子函數(shù)接收到的地址存放在指針變量p中。
- 然后就可以把p當(dāng)作數(shù)組操作了。
04. 多重指針
多重指針的使用情況較少,并且挺難的,所以這里講的目的是讓大家了解一下有這么個東西就好了。
程序:
#include<stdio.h> void main(){int a = 6;printf(" a: %dn",a);printf(" &a: %dn",&a);printf("n");int *p1 = &a;printf(" p1: %dn",p1);printf(" &p1: %dn",&p1);printf("n");int **p2 = &p1;printf(" p2: %dn",p2);printf(" &p2: %dn",&p2);printf("n");int ***p3 = &p2;printf(" p3: %dn",p3);printf(" &p3: %dn",&p3);printf("n");int ****p4 = &p3;printf(" p4: %dn",p4);printf(" &p4: %dn",&p4);printf("n");printf(" ****p4: %dn",****p4); }結(jié)果:
分析:
地址分析:
- 于是,*p4到p3的值。*p3得到p2的值。*p2到p1的值。*p1到a的值。
- 于是****p4便得到了a的值6。
05. 結(jié)束
到目前位置,基本上指針的重要知識點就結(jié)束了,其他的一些書本上的知識點,基本上不會怎么用(除非你要搞逆向)。
等到用到的時候,我會在說(但是基本沒啥了)。
老規(guī)矩,下一節(jié)布置習(xí)題。
公眾號:小小猿筆記總結(jié)
以上是生活随笔為你收集整理的c语言int转字符串_C语言零基础入门-指针-05的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python合并数组输出重复项_pyth
- 下一篇: mysql57win10安装配置_Win