日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组指针,指针数组例子解析

發(fā)布時(shí)間:2024/1/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组指针,指针数组例子解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

//數(shù)組與指針
/*
#include<stdio.h>
void main () ?
{ ? ?
? ? int arr[10]={1,2,3,4,5,6,7,8,9,10}; ?
? ? int *p; ?
? ? int (*q)[10]; ?
? ? p = arr; ?//數(shù)組首元素地址
? ? q = &arr; ?//數(shù)組首地址

?? ?//(數(shù)組首元素地址的操作)數(shù)組元素的引用與表示, 以第0個(gè)元素為例
? ? printf("************數(shù)組元素的7種基本表示方法*****\n");
? ? printf("----- arr[0] = %d, 0[arr] = %d, *(arr+0) = %d-----\n", arr[0], 0[arr], *(arr+0));
?? ?printf("----- ?p [0] = %d, ?0[p] ?= %d, ?*(p+0) ?= %d-----\n", p[0], 0[p], *(p+0));
?? ?printf("--- *(int*)q = %d---------------------------------\n", *((int*)q+0));
?? ?printf("數(shù)組首元素的地址 = %p\n", p);
?? ?printf("數(shù)組首元素的地址加一后的地址及其值: %p, %d\n", p+1, *(p+1));
? ? //(數(shù)組首地址的操作)指針指向的特殊改變
? ? printf("數(shù)組首地址 = %p\n", q);
?? ?printf("數(shù)組首地址加一后的地址及其值:%p, %d\n", q+1, *(int*)(q+1));
}
*/
//指針數(shù)組---指針數(shù)組的定義初始化和使用
/*
#include<stdio.h>
int main()
{
?? ?int a = 1, b = 2, c = 3;
?? ?char* arrc[3] = {"aaa", "bbb", "ccc"};
?? ?char** parrc = arrc;
?? ?
?? ?int* arri[3] = {&a, &b, &c};?? ?
?? ?int** parri = arri;?

? ? //int* arri[] 地址操作&元素操作
?? ?//int* arri[] 地址操作
?? ?printf("arri[0] = %p, arri[1] = %p, arri[2] = %p\n", arri[0], arri[1], arri[2]);
?? ?printf("arri[0]+1 = %p, arri[1]+1 = %p, arri[2]-2 = %p\n", arri[0]+1, arri[1]+1, arri[2]-2);
?? ?printf("*(parri+0) = %p, *(parri+1) = %p, *(parri+2) = %p\n", *(parri+0), *(parri+1), *(parri+2));
? ? //int* arri[] 元素操作
?? ?printf("*arri[0] = %d, *arri[1] = %d, *arri[2] = %d\n", *arri[0], *arri[1], *arri[2]);
?? ?printf("*(arri[0]+1) = %d, *(arri[1]+1) = %d, *(arri[2]-2) = %d\n", *(arri[0]+1), *(arri[1]+1), *(arri[2]-2));
?? ?printf("**(parri+0) = %d, **(parri+1) = %d, **(parri+2) = %d\n", **(parri+0), **(parri+1), **(parri+2));

?? ?//char* arrc[] 地址操作&元素操作
?? ?//char* arrc[] 地址操作
?? ?printf("arrc[0] = %p, arrc[1] = %p, arrc[2] = %p\n", arrc[0], arrc[1], arrc[2]);
?? ?printf("parri+0 = %p, parri+1 = %p, parri+2 = %p\n", parri+0, parri+1, parri+2);

?? ?//char* arrc[] 元素操作
?? ?printf("arrc[0] = %s, arrc[1] = %s, arrc[2] = %s\n", arrc[0], arrc[1], arrc[2]);
?? ?printf("*(parrc+0) = %s, *(parrc+1) = %s, *(parrc+2) = %s\n", *(parrc+0), *(parrc+1), *(parrc+2));
?? ?return 0;
}
*/

//指針必須初始化才可使用,及指針層面的交換問題

?1:int main ( )

?2:{

?3: char *str[5]={"welcome","to","fortemedia","Nanjing"};

?4: char * * p=str+1; ????//p存儲(chǔ) "to"字符串地址的地址,即&str[1]

?5: ?????????

?6: ????str[0]=(*p++)+2;//str[0]指向&'\0',然后p后移一位,

//存儲(chǔ)"fortemedia"字符串地址的地址,即p?=?&str[2]?

?7: ????str[1]=*(p+1);?//p+1?=?&str[3];則 str[1] = str[3],

//即str[1]和str[3]都指向同一地址&”Nanjing”????????

?8: ????str[2]=p[1]+3;//p[1]存儲(chǔ)"Nanjing"字符串的地址,為(char *)型,

//p[1]+3相當(dāng)于p[1]+sizeof(char)*3, ????

?9: ?????????????????//即str[2]指向"Nanjing"字符串中的"jing"地址

10: ????str[3]=p[0]+(str[2]-str[1]);

//str[3]指向從p[0](也就是*p(str[2]))開始的

//偏移量為3,?str[2]指向"jing",即p[0]指向"jing"????

11:?????????????????//所以str[3]指向"jing"的"g"地址

12: ????printf("%s\n",str[0]); //輸出'\0',也即換行

13: ????printf("%s\n",str[1]); //輸出"Nanjing"

14: ????printf("%s\n",str[2]); //輸出"jing"

15: ????printf("%s\n",str[3]); //輸出"g"

16: ?????????

17: ????return 0;

18:}

圖解注釋:

代碼行4:

?

?

代碼行6:

?

?

代碼行7:

?

?

代碼行8:

?

?

代碼行10:

?

?

Other one

?1:int main()

?2:{

?3: char *str[5] = {"welcome","to","fortemedia","Nanjing"};

?4: char **p = str + 1; //p存儲(chǔ) "to"字符串地址的地址,即&str[1]是”to”

?5: str[0] = *p++; ????????//首先p++,則此時(shí)p此時(shí)存儲(chǔ)了&str[2]時(shí)”fortemedir”

//p++仍是p加一之前的值

?6: ?????????????????????????//str[0]相當(dāng)于str[1]相當(dāng)于”to”

?7: ????str[1] = *(p+1); ?//*(p+1)的結(jié)果相當(dāng)于&"Nanjing"

//故str[1]相當(dāng)于&"Nanjing",相當(dāng)于str[3]

?8: ????str[2] = p[1] + 3; //p[1]相當(dāng)于*(p+1),相當(dāng)于&"Nanjing"

//然后*(p+1)+sizeof(char)*3,則此時(shí)str[2]存儲(chǔ)

?9: ????????????????????????//str[2]相當(dāng)于"Nanjing"字符串中的子字符串&"jing"

10: ????str[3] = p[0] + (str[2] - str[1]); //str[2] - str[1]的結(jié)果為3,

//第五行p[0]相當(dāng)于str[2],目前存儲(chǔ)了(第九行)&"jing"

11: ????????????????????????????????//故str[3]相當(dāng)于&"g"?

14: ????printf("%s\n",str[0]); ?//輸出"to"

15: ????printf("%s\n",str[1]); //輸出"Nanjing"

16: ????printf("%s\n",str[2]); //輸出"jing"

17: ????printf("%s\n",str[3]); //輸出"g"

18: ????return 0;

19:}

以下是對上述代碼關(guān)鍵行的圖解注釋:

代碼行4:

?

?

代碼行5:

?

?

代碼行7:

?

?

代碼行8:

?

?

?

代碼行10:

?


---------------------

轉(zhuǎn)載于:https://www.cnblogs.com/-lhy-to-s/p/10664907.html

總結(jié)

以上是生活随笔為你收集整理的数组指针,指针数组例子解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。