c int转char数组_C语言 指向数组和字符串的指针
實例1
我們在pointer_test.c的文件中寫一個test2()函數,我們定義一個有3個元素的字符數組初始化值分別為,’A’, ’B’, ’C’,然后定義一個字符指針pc,把數組ca的首地址復制給字符指針pc,然后通過訪問指針變量pc,來讀取指針變量pc所指向地址的數據,代碼如下:
void test2(){ char ca[3]={'A','B','C'}; char *pc; /*第一步 : 所有變量都保存在內存中,我們打印一下變量的存儲地址*/ printf("ca =%p",ca); printf("&pc =%p",&pc); /*第二步:所有變量都可以保存某些值,接著賦值并打印*/ //前面已經有ca[3]={'A','B','C'}; pc = ca; printf("pc =%p",pc); /*第三步:使用指針:1)取值 2)移動指針*/ printf("pc =%p",pc); printf("*pc =0x%x",*pc); pc=pc+1; printf("pc =%p",pc); printf("*pc =0x%x",*pc); pc=pc+1; printf("pc =%p",pc); printf("*pc =0x%x",*pc); printf("//================="); }main()函數
int main(int argc,char **argv){ printf("sizeof(char )=%d",sizeof(char )); printf("sizeof(int )=%d",sizeof(int )); printf("sizeof(char *)=%d",sizeof(char *)); printf("sizeof(char **)=%d",sizeof(char **)); printf("//================="); //test0(); //test1(); test2(); return 0;}編譯
gcc -m32 -o pointer_test pointer_test.c運行:
./pointer_test結果:
sizeof(char ) = 1 sizeof(int ) = 4 sizeof(char *) = 4 sizeof(char **) = 4 //============== ca =0xffb946b9 &pc =0xffb946b4 pc =0xffb946b9 pc =0xffb946b9 *pc =0x41 pc =0xffb946ba *pc =0x42 pc =0xffb946bb *pc =0x43 //=================分析:
- 第一步:
首先定義一個3個元素的字符數組ca(數組名表示該數組存儲的首地址),然后定義一個字符指針pc,然后通過printf()函數把定義這兩個變量在內存中的地址打印出來。
- 第二步:
執行pc = ca;就是把數組ca的首地址復制給指針變量pc,然后通過printf()函數打印pc的值可以看出pc的值就是字符數組ca的首地址0xffb946b9。
- 第三步:
通過移動指針我們可以發現數組所占用的內存是連續的,0x41(的ascii值‘A‘),0x42(的ascii值‘B‘),0x43(的ascii值‘C‘)。如圖
實例2
我們在pointer_test.c的文件中寫一個test3()函數,我們定義一個有3個元素的整型數組ia,初始化值分別為,0x12345678, 0x87654321, 0x13572468,然后定義一個整型指針pi,把數組ia的首地址復制給整型指針pi,然后通過訪問指針變量pi,來讀取指針變量pi所指向地址的數據,代碼如下:
void test3(){ int ia[3]={0x12345678,0x87654321,0x13572468}; int *pi; /*第一步 : 所有變量都保存在內存中,我們打印一下變量的存儲地址*/ printf("ia =%p",i); printf("&pi =%p",&pi); /*第二步:所有變量都可以保存某些值,接著賦值并打印*/ //前面已經有ia[3]={0x12345678,0x87654321,0x13572468}; pi = ia; printf("pi =%p",pi); /*第三步:使用指針:1)取值 2)移動指針*/ printf("pi =%p",pi); printf("*pi =0x%x",*pi); pi=pi+1; printf("pi =%p",pi); printf("*pi =0x%x",*pi); pi=pi+1; printf("pi =%p",pi); printf("*pi =0x%x",*pi); printf("//================="); }把main()函數test2()修改為test3().
編譯
gcc -m32 -o pointer_test pointer_test.c
運行:
./pointer_test
結果:
sizeof(char ) = 1 sizeof(int ) = 4 sizeof(char *) = 4 sizeof(char **) = 4 //============== ia =0xff91c060 &pi =0xff91c05c pi =0xff91c060 pi =0xff91c060 *pi =0x12345678 pi =0xff91c064 *pi =0x87654321 pi =0xff91c068 *pi =0x13572468分析:
- 第一步:
我們定義一個有3個元素的整型數組ia數組名表示該數組存儲的首地址),初始化值分別為,0x12345678, 0x87654321, 0x13572468, 然后定義一個整型指針pi,然后通過printf()函數把定義這兩個變量在內存中的地址打印出來。
- 第二步:執行pi = ia; 就是把數組ia的首地址復制給指針變量pi,然后通過printf()函數打印pi的值可以看出pi的值就是整型數組ia的首地址0xff91c060。
- 第三步:我們知道 pi是整型指針變量,并且整型變量占用四個字節,所以整型指針變量pi是以四字節為單元進行訪問的,所以pi和pi+1之間的差是一個整型變量的大小(4個字節)。
實例3
定義一個指向字符串的指針pc,然后對字符串指針進行初始化設置為abc,代碼如下:
void test4(){ char *pc="abc"; /*第一步 : 所有變量都保存在內存中,我們打印一下變量的存儲地址*/ printf("&pc =%p",&pc); /*第二步:所有變量都可以保存某些值,接著賦值并打印*/ //前面已經有pc="abc"; /*第三步:使用指針:1)取值 2)移動指針*/ printf("pc =%p", pc); printf("*pc =%c",*pc); printf("pc str=%s", pc); }把main()函數test3()修改為test4().編譯
gcc -m32 -o pointer_test pointer_test.c
運行:
./pointer_test
結果:
sizeof(char ) = 1 sizeof(int ) = 4 sizeof(char *) = 4 sizeof(char **) = 4 //============== &pc =0xfff49a68 pc =0x08048b4b *pc =a pc str=abc分析:
- 第一步:
定義一個指向字符串的指針pc,然后對字符串指針進行初始化設置為abc,此時,指針變量pc的值就是字符串abc的首地址,然后通過printf()函數把指針pc的地址打印出來為0xfff49a68
- 第二步:
首先通過printf()函數打印出指針變量pc的值(字符串abc的首地址),pc的值為0x08048b4b,然后通過pc指針訪問第一個字符(pc的就是字符串的首地址),所以pc的值就是字符‘a‘的地址,所以*pc的值就是’a‘,如圖所示:
下面分析一下指向數組的指針和指向字符串的指針:
char ca[3]={'A','B','C'}; char *pc0 = ca;pc0是指向字符數組的字符指針,pc0就是數組首元素的地址,pc0=&a[0]
char *pc11=”abc”;
pc是指向字符串的字符指針,pc1就是字符串”abc”的首字符’a’的地址。
「新品首發」STM32MP157開發板火爆預售!首批僅300套
總結
以上是生活随笔為你收集整理的c int转char数组_C语言 指向数组和字符串的指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《本草纲目》健身操算啥 筋膜刀更酸爽:刮
- 下一篇: 不行了?华为老对手思科被指业绩暴雷:在中