黑马程序员----------指针

本文详细介绍了C语言中指针的基本概念与使用方法,包括指针的定义、赋值及应用场景,并通过具体示例展示了如何利用指针进行数组和字符串的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                     ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

1.指针格式

类名称标识符  *指针变量名;

2.先定义后赋值:

int a = 10;

int *p;//定义一个指针变量

p = &a;//指针变量指向变量a的存储空间。

定义的同时赋值:

int a =10;

int *p = &a;

3.指针的作用:指针就一个作用,能够根据一个地址值访问对应的存储空间。

4. 指针的注意点:int *p 只能指向“int"类型的数据;

                             指针变量只能存储地址;

                             指针变量未经初始化,不要拿来直接访问其他存储地址;

例题1:

#include
void change(int *n);//函数声明
int main()
{
    int a = 90;
   
    change(&a);
   
    printf("%d\n", a);
   
    return 0;
}
void change(int *n)
{
    *n = 10;
}

例题2:

#include
int sumAndMinus(int a ,int b,int*minus);
int main()
{
 
 int n1 = 10;
 int n2 =6;
 scanf("%d,%d"&n1,&n2);
 int he;
 int cha;
    printf("%d,%d\n",he ,cha);
 return 0;
}
int sumAndMinus(int a ,int b,int*minus)
{
 *minus = a-b;
 return a+b ;
}

5.指针和数组

1>数组名就是数组的地址,也是首字符的地址。

数组元素的访问:

1>数组名[下标]  ages[1];

2>指针变量名 [下标] p[1];

3>*[p+i];

例子:输出数组中所有元素;

方法一:

#include
int main()
{
 int ages[] = {10,20,30,40,50};
 int *p = ages;//数组名就是数组第一个元素的地址
 int length = sizeof(ages)/sizeof(int);//求出数组的长度
 for (int i=0;i
 {
  printf("%d\n",ages[i]);//逐个输出数组的元素
 }
 return 0;
}

方法二:

#include
int main()
{
 int ages[] = {10,20,30,40,50};
 int *p = ages;//数组名就是数组第一个元素的地址
 int length = sizeof(ages)/sizeof(int);//求出数组的长度
 for (int i=0;i
 {
  printf("%d\n",p[i]);//逐个输出数组的元素
 }
 return 0;
}

方法三:

#include
int main()
{
 int ages[] = {10,20,30,40,50};
 int *p = ages;//数组名就是数组第一个元素的地址
 int length = sizeof(ages)/sizeof(int);//求出数组的长度
 for (int i=0;i
 {
  printf("%d\n",*(p+i));//逐个输出数组的元素
 }
 return 0;
}

例题:实际一个函数:int arraySum(int a[],int n),求一位数组a前n个数的和。现在利用int *p替换int a[]

 );

#include
int main()
{
 int fenShu[] = {10,20,30,40,50,60};

 
 int he = arraySum(fenShu,3 ) ;
 printf("%d\n",he);
 return 0;
}
int arraySum( int *p ,int n )
{
 int sum=0;
 for(int i = 0;i
 {
  p[i];
  sum = sum +p[i];
  
  
 }return sum;
 
}

6.指针和字符串:

定义字符串的两种方式:

1>char name[] = "itcast";

特点:字符串里面的字符能修改

使用场合:字符需修改的字符串中

2>char *name = "itcast";

特点:字符串里面是常量,不能修改

使用场合:字符经常用到,不许修改。

7.指针数组:

字符串数组的两种方式

1.>char *name[5] = {"rose","jack","jim"};

2>char name2[3][5]={"rose","jack","jim"};

8.返回指针的函数

#include
char *test();
int main()
{
 
 char *name = test();
 printf("%s\n",name);
 return 0 ;
}
char *test()
{
 return "rose";
}

9.指向函数的指针:

int (*p)(int int ):表示返回值类型是”int"型,且指针p指向的函数有两个“int"的参数。

例子:三种调用函数的方法

#include
void test();
int main()
{
 void (*p)();
 p = test;
 //test();//直接调用
    //p();//间接调用
    (*p)();//间接调用函数
 return 0;
}
void test()
{
 printf("调用了test函数\n");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值