本帖最后由 hanxujie 于 2015-7-20 21:37 编辑
指针类型 1.变量的定义 int *p; // 变量类型 变量名; // 格式:变量类型 *变量名; // 定义了一个指针变量p // 指针变量只能存储地址 // 指针就一个作用:能够根据一个地址值,访问对应的存储空间 // 指针变量p前面的int:指针变量p只能指向int类型的数据 2.间接操作变量的值 int a = 10; p = &a; *p = 20; 3.指向结构体的指针的定义:
struct Student *p; 利用指针访问结构体的成员 1> (*p).成员名称 2> p->成员名称 4.指针的使用注意: 1)不建议的写法, int *p只能指向int类型的数据
2)指针变量只能存储地址 3)指针变量未经过初始化,不要拿来间接访问其他存储空间
4)定义变量时的*仅仅是一个象征,没有其他特殊含义
5.指针和数组:
#include <stdio.h>
/* 1.数组元素的访问方式 int ages[5]; int *p; p = ages; 1> 数组名[下标] ages 2> 指针变量名[下标] p 3> *(p + i)
2.指针变量+1,地址值究竟加多少,取决于指针的类型 int * 4 char * 1 double * 8 */ void change(int array[]); int main() { // 20个字节 int ages[5] = {10, 11, 19, 78, 67};
change(ages);
return 0; }
// 利用一个指针来接收一个数组,指针变量array指向了数组的首元素 void change(int *array) { printf("%d\n", array[2]); //printf("%d\n", *(array+2)); }
/* void change(int array[]) { int s = sizeof(array);
printf("%d\n", s); }*/ void test() { double d = 10.8; double *dp; dp = &d;
printf("dp = %p\n", dp); printf("dp + 1 = %p\n", dp + 1);
int ages[5] = {10, 9, 8, 67, 56};
int *p; // 指针变量p指向了数组的首元素 p = &ages[0]; // 数组名就是数组的地址,也是数组首元素的地址 //p = ages;
/* p ---> &ages[0] p + 1 ---> &ages[1] p + 2 ---> &ages[2] p + i ---> &ages */
//printf("%d\n", *(p+2));
printf("%d\n", p[2]);
/* for (int i = 0; i<5; i++) { printf("ages[%d] = %d\n", i, *(p+i)); }*/ // printf("%p\n", p); // printf("%p\n", p + 1); // printf("%p\n", p + 2); } 6.指针和字符串
char *name = "itcast"; * 特点:字符串其实是一个常量字符串,里面的字符是不能修改 * 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
|