标签:
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;
}
标签:
原文地址:http://www.cnblogs.com/smqh/p/4240214.html