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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

二、指针
1.        定义
变量类型 *变量名 int *p    p = &变量名
指针变量只能存放地址,指针就是通过地址访问相应地存储空间,从而操作存储空间内的数据。通过%p输出指针里存储的地址值
2.        注意
1>        int *p;
double a = 3.0;
p = &a;
指针p只能指向int类型的数据
2>        int *p;
p = 10;
指针变量只能存地址
3>        int *p;
printf(“%d\n”,*p);
未经初始化的指针,不能访问存储空间
3.        所有类型的指针,在64位编译器环境下,都占用8个字节的存储空间,而为指针定义类型,与指针所占空间没有关系,指针的类型为了取出存储空间的数据时,应该取出多少字节的数据。
4.        指向指针的指针
int main(){
int a = 10;//假如a的地址ffc0
int *p = &a;// p = ffc0,*p = 10而p的地址并非ffc0,假设为ffc5
int *pp = &p;// pp = ffc5指向指针p的空间,*pp = *p = 10
*pp =20;
printf(“%d\n”,a);//通过指针pp间接修改a的值,输出为20
}
三、        指针与数组
1.        定义
int ages[5] = {20,25,27,29,30};
int *p;
p = &age[0] ⇔ p = ages;//数组首元素、数组名即数组的地址,p指首元素
2.        利用指针遍历数组元素
p→ages[0]
p+1→ages[1]
p+2→ages[2]
p+i→ages[i]
for (int i = 0; i<5; i++)
{
     printf("ages[%d] = %d\n", i, *(p+i));
        }
//指针变量+1,地址加多少取决于指针的类型
int * +4; char * +1; double * +8;
四、        指针与字符串
char name[] = “jack”;//字符串变量
//指针变量name1指向字符串的首字符
char *name 1=”andy”;//字符串常量,不可改
指针数组:char *name[2] = {“jack”,”andy”};
注意:1> 利用数组
char name[] = "itcast";
  * 特点:字符串里面的字符是可以修改的
  * 使用场合:字符串的内容需要经常修改
2> 利用指针
  char *name = "itcast";
  * 特点:字符串其实是一个常量字符串,里面的字符是不能修改
  * 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
                         习题:编写一个int string_len(char *s),返回字符串s的字符长度
                       
#include <stido.h>
int string_len(char *s);
int main()
{
    int size = string_len("andy22");
   
    printf("%d\n", size);
    return 0;
}
int string_len(char *s)
{
    // 记录字符的个数
    int count = 0;
   
                            // 如果指针当前指向的字符不是'\0'
                     // 首先*s取出指向的字符
                     // 然后s++
                            while ( *s++ )
                    {
                        // 个数+1
                        count++;
                   // 让指针指向下一个字符
                  //s = s + 1;
                         s++;
                    }
   
                    return count;
}
五、        指向函数的指针
1.        定义
函数返回值类型 (*指针变量名) (形参);
void (*p) ();
2.        注意
函数名代表着函数的地址
指针变量p存储函数的入口地址,所以p++是无意义的

void tset
{
       
}
int main()
{
        void (*p) ();
        p = test;//函数名即地址,p指向test函数
//间接调用函数
        p();
        (*p) ();
        return 0;
}

3 个回复

倒序浏览
做的不错啊
回复 使用道具 举报

不会。其实基本上都是上课老师敲过得,再通过ppt和视频稍微整理了下。
回复 使用道具 举报
还没看到这一部分 悲催
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马