A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Esther33 中级黑马   /  2015-8-10 22:04  /  781 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

遍历指针数组的值:
int a=1;
int b=2;
int c=3;
int *arr[3]={&a,&b,&c};
for (int i=0;i<3;i++)
{
    printf("%d\n",*(arr[i]));
打印每一个元素:
printf("%p\n",arr[i]);

用指针取最大值:
int tempMax=*(arr[0]);
for(int i=0;i<3;i++)
{
   if (tempMax<*(arr[i])
       {
            tempMax=*(arr[i]);
       }
}
printf("%d\n",tempMax);

在控制台上输入整数,创建一个长度为3的数组:
int a=3;
int intArr[3];
for(int i=0;i<3;i++)
{
    scanf("%d",&a);
    intArr[i]=a;
}


指针也可以有指针名[移动数量],c[1]等效于*(c+1)
指针名[移动数量],并且以这个指针开始的位置为基准
数组当参数运算实际传递的是数组首元素的地址



如果:
int a=0;
int b=1;
int *p=&a;
printf(‘"%d---%d\n",*p,p[1]);  p[-1]等效于*(p-1)
这时输出的p[1]的值为1,因为变量定义时内存寻址是由下往上,由大到小



指针与二维数组
1.二维指针数组是一个数组,里面的每一个子数组存得元素的类型是指针
2.二维数组的指针是一个指针,只是指针类型是二维数组
例如:int arr[2][3]={{1,2,3},{4,5,6}}  这是一个二维数组
         int (*p)[2][3]=&arr;就是一个二维数组的指针

指针与函数
1.概念:是函数,这个函数的返回值类型是指针
2.定义:类型 * 函数名(参数){return 指针类型}
如:int *add(int *a){return &a;}表示定义一个返回值是int指针类型的add函数
3.什么是函数指针?
是指针,函数也会在内存开辟一块空间,函数指针即这块空间的地址
定义:函数返回值类型(*指针名)(参数类型);
赋值:指针名+函数名;
如:先定义函数 int add(int a){...},int(*p)(int)=add;
使用:指针名(实参); 如:p(3);等效于add(3);

4.特点:①函数指针可以做加减运算,但没有意义,不建议
            ②函数指针可以当做参数传递,因为其是一个指针类型
            ③不管什么类型的指针,只要是指针,其里面存得就是地址

什么时候需要定义一个指针型函数?
需要返回一个指针时
什么时候需要定义一个函数的指针?
需要把这个函数当做参数去传递的时候

指针与字符串
1.怎么表示一个字符串?
   char arr[]="heima"    ;    char arr[]={'h','e','i','m','a'};  //用字符数组创建的是变量
2.怎么用指针表示一个字符串?
   char *p="heima";//用指针创建的是变量
   指针定义字符串的时候,存的是常量区字符串的首元素地址
3.怎么表示一个字符串数组?
   char *arrs[2][8]={"itcast","heima"};  
4.怎么用指针表示一个字符串数组?
   chars[2]={"itcast","heima"};

特点:①指针定义的字符串是常量,不能被改变,而字符数组定义的是变量,可以被改变
         ②指针定义一个字符串,指针存的是实际是在常量区的那个字符串的首字符的地址


内存的分区:
堆区:堆区存储用户手动申请的内存数据,如果用户不释放会一直存在,容易内存泄漏
栈区:是我们在定义变量的时候,系统自动给我们分配的内存空间,一旦变量在作用域内执行完毕,会  
         立即销毁,系统自动回收
静态区:全局变量
常量区:常量--字符串常量,指针方式定义的字符串。不是所有的常量都在常量区
代码区:主要放函数的二进制代码

常量区的常量与变量区别
①常量区的常量只有一份,也就是重用的时候,用的都是同一个,地址一样
②而变量同一个字符串,不同的变量地址不同

1 个回复

倒序浏览
写的太详细了,厉害啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马