数组指针,指针数组例子解析
//數(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;
}
*/
//指針必須初始化才可使用,及指針層面的交換問(wèn)題
?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]))開(kāi)始的
//偏移量為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:}
以下是對(duì)上述代碼關(guān)鍵行的圖解注釋:
代碼行4:
?
?
代碼行5:
?
?
代碼行7:
?
?
代碼行8:
?
?
?
代碼行10:
?
---------------------
轉(zhuǎn)載于:https://www.cnblogs.com/-lhy-to-s/p/10664907.html
總結(jié)
以上是生活随笔為你收集整理的数组指针,指针数组例子解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机上网记录怎么清除,如何清除浏览器缓
- 下一篇: MATlAB运用——数值积分