1> 格式:變量類型 *變量名。舉例:char *p,定義了一個指針變量p,只能存儲地址
* 記住*不是指針變量名,只是指針的一個標志
2> 作用:指針就一個作用,存儲地址,並且根據地址值訪問對應的存儲空間
3> 例子
1 int main() 2 { 3 int a = 90; 4 int *p ; 5 p = &a; 6 return 0; 7 } 指針代碼* 代碼在內存中的表示
* 注意點:① int *p只能指向int類型的數據 ②指針變量為經過初始化,不要拿來間接訪問其 他存儲空間 ③ 不允許這樣寫:*p = &a ,*p代表訪問指針p所指向的存儲空間 ④ 定義變量 是的*僅僅是一個象征,沒有其他特殊含義
char a='A';
char *p = &a; // 指向char類型存儲空間的指針
char **pp = &p; // 指向指針的指針
char ***ppp = &pp; // 三級指針(不經常用)
1> 實現調用一個函數,得到多個返回值
1 #include <stdio.h> 2 3 int sumAndMinus(int num1, int num2, int *num3) 4 { 5 *num3 = num1 - num2; 6 return num1 + num2; 7 } 8 9 10 int main() 11 { 12 int a = 12; 13 int b = 8; 14 int minus; 15 int sum = sumAndMinus( a, b, &minus); 16 return 0; 17 } 多返回值* 指針占用內存與具體編譯器有關,在Xcode中任何類型指針占用8個字節
//利用下標進行遍歷
int nums[3] = {1,2,3,}
for(int i = 0;i < 3; i++)
{
printf("%d\n", nums[i]);
}
int nums[3] = {1,2,3,};
int *p = &nums ;
//指針p指向數組的首元素地址;
//(p+1)指向 nums[1];
for(int i = 0;i < 3; i++)
{
printf("%d\n", *(p+i));
printf("%d\n", p[i ]);
}
char c1[] = "name";
//上面這行代碼表示的是字符數組,所表示的是字符串變量
char *c2 = "name";
//上面這行代碼。指針變量c2指向的是字符串首字母。它表所表示的是字符串常量
//兩行代碼的不同,也與數據在內存中的存儲有關
char *c3 = "name";
//注意:c2與c3所便是的是同一個地址
1> 利用數組
char c[] = "name";
//特點:字符串裡面的字符是可以修改的
//使用場合:字符串的內容需要經常修改
2> 利用指針
char *c = "name";
//特點:字符串其實是一個常量字符串,裡面的字符是不能修改的
//使用場合:字符串的內容不需要修改,而且這個字符串經常使用
1> 指針數組的定義
char *name[3] = {"jack", "rose", "tom"};
2> 字符串的輸入
//新建一個字符數組,用來保存用戶輸入的字符串
char name[20];
// 數組名就表示數組首元素的地址
scanf("%s", name);
char *test()
{
return "name";
}
int main()
{
char *p = test();
return 0;
}
void test()
{
printf("調用了test函數");
}
int main()
{
//(*p)是固定寫法,代表指針變量p將來肯定是指向函數
//左邊的void :指針變量P指向的函數沒有返回值
//右邊的():指針變量p指向的函數沒有形參
void (*p)();
//函數名就是函數地址
p = test;
//函數調用的三 種方式
(*p)();// 第一種方式:直接調用
test();// 第二種方式:利用指針調用
p();//第三種方式:利用指針調用
return 0;
}