黑马程序员---c语言 指针的学习笔记

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


       指针

 内存和地址的概念、


内存的地址都是用16进制的数表示的 

指针就是个地址,程序运行,需要载入到内存中,因此内存所有的东西都是有地址的

取地址运算符&

获得变量在内存中的地址

取地址符%d

地址都是16位的二进制

数组,数组名就是地址

函数名也是地址



在现代操作系统的中

c语言访问的内存都是虚拟的内存。

虚拟内存是操作系统为每个运用程序维护的内存空间

每个运用程序都可以访问所有的内存空间


指针变量

存储指针,即地址数据变量

指针变量用于存储地址,但对地址的类型有一定的要求


类型  *变量名
用来存储地址,取出存储地址的值

iint*p =&a  是将a的地址赋给了P   ;


int p1=0;
int *p2=NULL
NULL 就是零;


*p++;
//首先让地址++,然后取地址的数据
//(&num)++

指针可以在函数中允许在函数中更改


字符串指针赋值

char *str=“1234”;

开辟内存存储字符串,然后使用指针

char arr[]={‘1’,‘2’,‘3’}

char *str=arr;



指针在内存空间只有8个字节


数组表示的字符串可以修改  

指针表示的字符串不能修改

字符串%s是以\0 结尾。


可执行程序结构

文件就分为:代码区;常量区

常量区存储的是程序的所有常量

代码区存储的是代码对应的机器指令。

堆区,中存储的由用户管理的动态内存,这个内存完全由用户管理。

栈区,是操作系统的维护的内存,然后供函数运行函数执行结束,内存释放


递归的运用会消耗内存的很多的内容。


#include
int sum (int n ){

    if (n <=1)
        return 1;
    
    return n +sum(n-1);

}

int main (){
    int m =6;
    printf ("%d\n",sum(m ));
    return 0;





*P    表示获得p地址对应的内容
    
//指针变量 初始化,指针变量应该用地址初始化
//定义的同时进行初始化
      1、完全初始化
            int *p=&a   用a的地址初始化
                                  也就是p指向a
                   int *p=&a ,p2=&a    p1 p2  都指向a
       2、部分初始化
          int *p3=&b,*p4;   同时定义两个指针变量
            p4=&b


 先定义后初始化
       

  如果定义个指针变量,但不知道让他指向谁


  int*p5=NULL    //null   是空(0)
   int*p6=0      //为空   表示谁都不指


//质数函数的封装


   if(int i= 2 ;i<自己;i++){
    if(自己%i==0){
      break;
    }

    return  返回自己或者1;

 

//函数值传递
   将基本类型作为函数的参数,都是值传递
   将那些直接存储的数据类型,称为值类型(因为作为函数参数时,是值传递)


数组统计的算法
  for(int i =0;i< length;i++){

if(min>nums[i]){
  min =nums[i]
}




冒泡排序

  
FOR (int i =0;i 





在c99 中标准中,允许使用变量作为数组声明的长度
int length ;
printf(“>”);
scan (“%d”,&length);
int array [length]

你可能感兴趣的:(黑马程序员---c语言 指针的学习笔记)