0
点赞
收藏
分享

微信扫一扫

指针搞都不懂,好意思说自己会C语言?


指针搞都不懂,好意思说自己会C语言?_数组


C语言面试必问知识点之「指针」


一、指针相关概念


  • 指针与地址
  • 我们使用的计算机,系统为了更好地管理我们的内存,就为内存区的每一个字节都分配一个唯一编号,这就是“地址”。
  • 指针的实质就是地址,就是这一个个编号。
  • 指针变量
    变量在编译的时候系统要为它分配一个地址,如用另一个变量来存放这个地址,那么这个变量就叫指向变量的指针变量。


  • 指针的定义(type *变量名;)
  • int *p;
  • 表示该变量的类型是一个指针变量,指针变量名是p而不是*p
  • 如果在同一行定义多个指针变量应该是:int *p1, *p2;而不是int *p1, p2
  • 指针的初始化
type *变量名 = 地址;
  • 例子
#include <stdio.h>

int main()
{
int a = 100;
printf("%d\n",&a);

int *c = &a;
printf("%d\n",c);

return 0;
}

二、指针变量的使用(如何通过指针变量访问和运算)

  • 指针变量访问
    定义一个指针变量,并且指向一个地址
int a = 10;
int *p = &a;
*p = 100;
printf("a:%d\n",a);
  • 指针运算
    定义一个指针变量,指向一个地址,并对指针做自增自操作
#include <stdio.h>

int main()
{

int a = 10;
int *p = &a;
printf("p:%d\n",p);
p++;
printf("p:%d\n",p);
return 0;
}


三、数组指针

  • 数组指针
    数组指针,见名知意就知道是数组的指针,也就是数组的地址,在定义指针变量时,*变量名一定要带上(),不然就是定义指针数组
int main()
{
int array[5] = {1,2,3,4,5};
printf("%d\n",&array);
int (*p)[5] = &array;
printf("%d\n",p);
return 0;
}

四、指针数组

  • 指针数组
    指针数组,就是存放指针的数组,数组里的元素都是指针,在定义指针数组时,不需要加上(),不然就是定义数组指针
int main()
{
int array[5] = {1,2,3,4,5};

int *p[5];
int i;
for(i=0;i<5;i++)
{
p[i] = &array[i];
printf("%d\n",p[i]);
}

for(i=0;i<5;i++)
{
printf("%d\n",*p[i]);
}
return 0;
}


五、字符串与指针

  • 字符串的表示形式
  • 数组形式:
    char str[] = "I love xdclass"; //栈
  • 字符指针形式:
    char *str = "I love xdclass"; //文字常量区
  • 字符指针形式
char *str = "I love xdclass";

因为常量不可修改,所以指针变量指向的字符串内容不可修改,即*str = "xdclass";这样是错误的


  • 修改指针变量的值
char *str2 = "I love the world";
str = str2;
  • 例子
int main()
{
char string[] = "I love xdclass";
printf("%s\n",string);

char *str = "I love xdclass";
char *str2 = "I love the world";
str = str2;
printf("%s\n",str);
return 0;
}




六、怎么使用指针函数

  • 指针函数
    函数返回类型是指针,所以就指针函数
  • 例子
#include <stdio.h>

// 买菜:
char* buy()
{
char *foods = "鸡蛋";
printf("%s买好了\n",foods);
return foods;
}

// 洗菜
void wash(char *foods)
{
printf("把%s洗干净了\n",foods);
}

// 炒菜
void make(char *foods)
{
printf("把%s做好了\n",foods);
}

int main()
{
char *foods = buy();
wash(foods);
make(foods);
return 0;
}



七、怎么使用函数指针

  • 函数指针的定义
    函数返回值类型 (* 指针变量名) (函数参数列表);
int(*p)(int, int, double, float);
  • 例子
int printfx(int x)
{
printf("%d\n",x);
return 0;
}

int main()
{
printfx(2);
int (*p)(int);

p = printfx;
p(3);

return 0;
}



八、 什么是指向指针的指针

  • 什么是指向指针的指针?
    如果一个指针变量存放的是另一个指针变量的地址,则称这个变量为指向指针的指针变量或指向指针的指针
  • 定义方式
    数据类型 **变量名
  • 例子
int main()
{
int a = 100;
int *p = &a;
int **pp = &p;
printf("a:%d\n",a);
printf("p:%d\n",*p);
printf("pp:%d\n",**pp);
return 0;
}



指针搞都不懂,好意思说自己会C语言?_指针数组_02 指针搞都不懂,好意思说自己会C语言?_指针变量_03 指针搞都不懂,好意思说自己会C语言?_指针数组_04


# Louis讲师 #

- 手把手带你走进指针的世界 -





指针搞都不懂,好意思说自己会C语言?_指针数组_05

举报

相关推荐

0 条评论