指针这块必须牢牢把握!(初阶-下)

简介: 指针这块必须牢牢把握!(初阶-下)

5.地址,数组与指针的概念


问:地址可以比较大小吗?
地址可以比较大小,地址本质是个16进制的数值
指针中存储的是地址,地址可以看成一个数据,因此是可以比较大小的
复制代码


指针和数组的关系?


指针和数组毫无关系

数组:


数组:是一块连续的空间,放的是相同类型的元素
数组和数组大小,元素类型,元素个数有关系   
复制代码
如: 1.int arr[10]; 
数组arr的类型为: int[10]   去掉数组名就是数组的类型
      2.int arr2[5]
 数组arr2的类型为:int[5] 
    arr和arr2是不同的数组
   int(*pa)[10] = &arr;  //pa是数组指针
   int(*pa2)[5] = &arr2; 
复制代码


去掉数组名->数组的类型

去掉数组名和元素个数->数组存放的元素类型



关于数组名的理解

数组名是首元素地址

但是有两个例外:

1.sizeof(数组名)-这里的数组名代表的是整个数组,计算的是整个数组的大小,单位是字节

2.&数组名-取出的是整个数组的地址

&数组名+1:跳过整个数组


指针:

指针:是一个变量,存放地址

指针是变量,是变量就有地址。所以指针变量也有自己的地址

指针变量的大小:4byte(32位平台)  8byte(64byte平台)


int a = 10;
int* p =&a;
// * 说明p是指针,int:说明p指向的类型为int类型
int** pp = &p;  //pp就是二级指针
复制代码

image.png

image.png

6.指针数组

指针数组是数组

int main()
{
    int a = 10;
    int b = 20;
    int c = 30;
    int* arr[3] = {&a,&b,&c};
    int i = 0;
    for(i = 0;i < 3;i++)
    {
        printf("%d\n",*(arr[i]));
        //也可以不加括号,因为[]的优先级比*高
        printf("%d\n",*arr[i]);
    }
    return 0;
}
复制代码

7.指针与结构体

关于结构体

结构体可以在main函数内部定义,但不建议


结构体类型定义并不占用空间   实际定义结构体变量才占用空间****


全局的结构体,未初始化,编译器会给它的变量默认初始化为0

**静态区的变量不初始化默认为0  **

静态区:static,全局变量


typedef struct Book
{
  char name[20];
  float price;
  char author[20];
}Stu; b1, b2;     //b1,b2是全局变量,存放在静态区
//typedef重命名类型名字  Stu ==struct Book 类型名   
//传值
void Print(Stu b1)
{
  printf("%f %s %s\n", b1.price, b1.author, b1.name);
}
//传址-结构体指针接收
void Print2(Stu* b1)
{
  printf("%f %s %s\n", b1->price, b1->author, b1->name);
}
int main()
{
  struct Book b3 = { "Mango",19.0,"Lemon" };  //b3是局部变量,存放在栈区
  Print(b3);//传值
  Print2(&b3);  //传址
  return 0;
}
复制代码

对于上面两种传结构体的方式:传值,传址

传地址:只传过去4个字节,浪费的空间小

传值:直接开辟一个和原结构体相同大小的空间,浪费空间,会导致压栈问题

所以我们更倾向于传址方式


相关文章
|
7月前
|
存储 编译器 C语言
c语言进阶部分详解(指针初阶)
c语言进阶部分详解(指针初阶)
77 0
|
7月前
|
存储 编译器 C语言
C语言初阶⑦(指针初阶)知识点+笔试题(上)
C语言初阶⑦(指针初阶)知识点+笔试题
47 0
|
5月前
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下
|
5月前
|
存储 C语言
【C语言初阶】指针篇—上
【C语言初阶】指针篇—上
|
6月前
指针初阶(2)
指针初阶(2)
32 0
|
6月前
|
存储 编译器 Perl
指针初阶(1)
指针初阶(1)
35 0
|
7月前
|
存储 C语言
『C语言初阶』第七章 -初识指针
『C语言初阶』第七章 -初识指针
|
7月前
|
存储 编译器 C语言
C语言初阶⑦(指针初阶)知识点+笔试题(下)
C语言初阶⑦(指针初阶)知识点+笔试题
50 0
|
7月前
|
编译器 C语言 C++
初阶指针(C语言)
初阶指针(C语言)