pragma mark 指針和數(shù)組
pragma mark 概念
pragma mark 代碼
#include <stdio.h>
int main()
{
#warning 指針和數(shù)組
#warning 定義一個指針指向數(shù)組
/*
int num = 10;
int *numP = #
num = 55;
*numP = 100;
printf("%i\n",num);
printf("%i\n",*numP);
int ages[3] = {1,3,5};
// 數(shù)組名稱就是數(shù)組的地址,數(shù)組的地址就是首元素的地址
printf("ages = %p\n",ages);
printf("&ages[0] = %p\n",&ages[0]);
// 指針是專門用于保存地址
// 數(shù)據(jù)類型 *變量名稱;
// 由于數(shù)組的首元素的地址就是數(shù)組的地址,所以定義一個指針指向數(shù)組其實就是定義一個指針指向數(shù)組的首元素,所以數(shù)組的首元素是什么類型,那么指向指向數(shù)組的指針就是什么類型.
// int *p = &ages[0];
int *p = ages;
printf("p = %p\n",p);
printf("&ages[0] = %p\n",&ages[0]);
*/
#warning 如何利用指針操作數(shù)組 方式1
/*
int ages[3] = {1,3,5};
ages[0] = 998;
// 相當(dāng)于 0x7fff5fbff79c[0]
printf("ages[0] = %i\n",ages[0]);
int *p = ages; // int *p = &ages[0]; &ages == ages
printf("p = %p\n",p);
printf("ages = %p\n",ages);
// 因為p指針中存儲的值和ages中存儲的值相同,所以以前用ages的地方都可以使用p來替代
p[0] = 221;
// 相當(dāng)于 0x7fff5fbff79c[0]
printf("age[0] = %i\n",p[0]);
for (int i = 0; i < 3; i++) {
printf("p[%i] = %i \n",i,p[i]);
}
*/
#warning 方式2
/*
int ages[3] = {1,3,5};
int *p = ages; //int *p = &ages[0];
printf("ages[0] = %i\n",ages[0]);
printf("*p = %i\n",*p);
printf("指針加1之前 p = %p\n",p);
// p = &ages[1];
// 指針+1, 并不是真實的+1,而是+4
// 指針+1, 其實是加上指針類型所占用的長度
// 指針類型的兩個用途: \
第一個用途 : 取值的時候, 會根據(jù)指針類型所占用的字節(jié) 去 取出對應(yīng)字節(jié)的數(shù)據(jù) \
第二個用途, 用于做加法運算, 指針+1 , 其實是加上指針類型所占用的長度,如果當(dāng)前指針類型是int涡相, 那么+1本質(zhì)上是加上4個字節(jié)
p = p + 1;
printf("指針加1之后 p + 1 = %p\n",p);
printf("*p = %i\n",*p);
// p = &ages[2];
p = p + 1;
printf("指針加1之后 p + 2 = %p\n",p);
printf("*p = %i\n",*p);
int a = 10;
a = a + 1;
printf("a = %i\n",a); // 11
*/
/*
int num = 10;
int *numP = #
printf("num = %i\n",num);
// *numP 代表訪問numP之鄉(xiāng)的那塊內(nèi)存空間
printf("*numP = %i\n",*numP);
*/
/*
char c = 'a';
char *cp = &c;
printf("cp = %p\n",cp);
cp = cp + 1;
printf("cp + 1 = %p\n",cp);
cp = cp + 1;
printf("cp + 1 = %p\n",cp);
*/
int ages[3] = {1,3,5};
int *p;
p =ages;
/*
printf("age[0] = %i\n", *p + 0);
printf("age[i] = %i\n", *(p + 1)); // p = p + 1; *p;
printf("age[2] = %i\n", *(p + 2)); // p = p + 1; *p;
*/
/*
for ( int i = 0 ; i < 3; i++) {
printf("ages[%i] = %i\n",i,*(p + i));
}
*/
/*
只要一個指針指向了數(shù)組,那么訪問數(shù)組就有3種方式:
1 : ages[0];
2 : p[0];
3 : *(*p + 0); // 大神的寫法 另一種訪問方式 0[p]
*/
printf("age[0] = %i\n",0[p]);
return 0;
}