C 语言 整理9

//定义一个指针变量 , 和定义整型变量类似,也包括三部分:数据类型 变量名 =  初值
    //只不过指针变量用来存储地址而已.
    //int  * 指针变量类型 , p 指针变量名 , NULL 指针变量初值.
    //int  的作用 : 1,当自增时增加几个字节,2,当存取数据时一次性读取几个字节.
    // 定义时 , * 告诉编译器,后面的变量是一个指针变量;
   
    int  * p = NULL ;
    
    //指向关系
    p = &a;  //将a 的地址赋值给p .
    
    printf("%d\n", a);  //直接访问 内存单元数据
     // * p 此时的作用是根据指针变量存储的地址,找到对应的内存单元,将内存单元上的数据读取出来.
    
    printf("%d\n", *p); //间接访问 /间接访问内存单元数据
    
    * p =20 ;
    printf("%d\n", a);
    printf("%d\n", *p);
    //对于指针变量类型,所规定的存储空间的大小只和操作系统有关,32位是4个字节,64位是8个字节.

int * p1 = NULL;
//    //赋初值为NULL , 让指针变量指向一个无效的空间.
//    //当对p1 指向的空间进行操作时,p1 必须指向一个有效的空间.
//    p1 = & b;
//    *p1 = 50 ;
//     printf("%d\n" , *p1);
//    int c = 30 ;
//    p1 = & c ;
//    //指针变量的重新赋值,我们叫做指针重指向 ,只看最后一次指向.
//    printf("%d\n" , *p1);

//Incompatible pointer types assigning to ‘int * ‘
    //incompatible 类型不匹配....
    //Thread 1 : EXC_BAD_ACCESS (code = 1 , address = 0x0)
    //没有指向一个有效的空间.  奔溃 crash
    
    
   //指针与数组
//    
//    int a [ 5] = {10,11,12,13,14};
//    
//    int  * p = NULL;
//    //让p指向数组的首地址 (数组名 a 就代表数组的首地址 , 代表数组中第一个元素的地址).
//    p = a;  //
//   // printf("%d \n" , *p);
//  //  p ++ ;
//    for (int i = 0 ; i < 5 ; i ++) {
//        printf("%d  " , *(p + i)); //printf("%d  " , *(a + i));
//    }
//    printf("\n");
//    //当把数组的首地址赋给指针变量p之后,指针变量就可以当做数组名来使用.
//    //数组名是一个常量不可对其更改.

//指针数组.(数组中的内一个元素都是一个指针变量).
    char str [] = "Frank";
    //字符数组str 需要存储字符,所以把常量区中Frank 字符串的内容拷贝到数组中. 通过数组操作操作的是栈区的内容.
    //而对 数组a 来说,数组中的每一个元素都是一个字符型的指针变量,指针变量用来存储地址,所以将常量区中Frank , Duck ,iPhone 的开始地址拷贝到对应的变量中通过指针操作操作的是常量区的内容.
    char * a [3] = {"Frank","Duck","iPhone"};
     ////常量区的内容不可更改.

C 语言 整理9,布布扣,bubuko.com

时间: 2024-10-03 23:03:46

C 语言 整理9的相关文章

c 语言 整理

// const 修饰变量,把变量当做常量来看待,只能读不能写. //const  修饰谁,谁就不可变 const int *p = &a; //const 修饰 *p, 不能通过指针变量p修改指向空间的内容 ,但是p 可以重指向. int const *p1  = &a ; //const 修饰 *p1, 不能通过指针变量p修改指向空间的内容 ,但是p 可以重指向. (通过*p1 修改指向空间的内容的权限 被限制) int * const p2 =  &a; //const 修饰

C 语言 整理5

// 函数存在的意义:把main 函数中复杂的逻辑进行拆分,有一个一个单独的函数来处理一个单独的模块,main 函数只起到宏观调控的作用./* 函数的定义 : 包括以下四部分: 1.返回值类型(要返回的数据的类型) 2.函数的名字(给函数起一个名字). 3.参数列表(用来接收传入的数据). 4.函数体(函数真正的功能,实际做的操作).*/ /* 函数格式:1.无参数 无返回值. void函数名命名规范: 有单词组成 ,查了第一个单词外,其他单词的首字母 大写. 工程名命名规范: 有单词组成 ,每

C 语言 整理6

//数组作为参数时,函数调用传入数组名即可 #import "Function.h"int  var = 10; //全局变量,在所有函数中都可以访问.程序运行期间空间不回收. //变量 x y 是在函数内部定义的变量,只能在函数内部有效,在函数之外,就无法访问,所以叫做局部变量,(当函数调用时,为变量开辟空间,当函数结束之后,回收空间.) int maxValue (int x ,int y) //被static 修饰的变量成为静态变量,    //特点: 1.空间值开辟一次,而且在

C 语言 整理7

#import "Struct.h"//导入自定义的头文件时,用 " "  导入系统定义的头文件时 使用 < > //数组作为函数参数在传递时,值填写数组名即可.   // printAllStudentInfo( b ,5); /** *  结构体嵌套,在一个结构体的结构体成员变量是另外一个结构体类型的变量. */ C 语言 整理7,布布扣,bubuko.com

C 语言 整理8

// int  a  = 010 + 10 ;  //0开头是八进制.    //0b 开头是二进制    //0x 开头是十六进制   // printf("%d " ,a ); //%d 打印十进制整数.    //%x 打印十六进制. (字母小写)   %X  打印十六进制 (字母大写)    // %o 打印八进制    //一个字节 又是八位二进制数.            //位运算符    //按位与 & (同为1 , 则为1 , 否则 为0 );       

C 语言 整理1

//枚举类型是一个构造类型,它使一组整型常量,罗列处理所有的可能性.//定义枚举 使用关键字 enum + 枚举类型的名字 { 枚举值,多个枚举值之间通过使用逗号分隔}: 最后的分号必不可少.//枚举类型将人能够识别的标识符,和计算机能识别的数字对应起来. //if(条件表达式){语句} 当条件表达式的条件成立时,执行大括号内的语句,否则执行if之后的语句. //if(条件表达式) {语句1} else { 语 句2} break;//结束当前分支,跳出switch,执行之后的语句. defau

C 语言 整理2

//for    //<#initialization#> 变量初始化    //<#condition#>循环条件    //<#increment#>//变量增量    //<#statements#>循环体,每次反复执行的内容. //循环变量的名字 先以i,j,k,为主. // while和do while 的区别    //对于while 循环,需要先判断循环条件,然后执行循环体,而对于do while 不管条件是否成立,先执行一次循环体,后判断条件

C 语言 整理 3

//定义一维整形数组    //1,数据类型 2,数组名 3, 中括号中填写元素个数 4,初值 ,赋值时使用大括号,内部为每个变量赋初值,中间应聘哪个逗号分割.    //定义数组时,数组元素的个数只能是常量或者是常量表达式,不能为变量.    //取数组中的元素的时候 , 数组名 + 下标. //数组中元素的下标范围 , 0  到数组元素下标 - 1;   数组所占内存空间的大小 = 数组中每个元素所占空间的大小 * 数组元素个数. //外层循环决定比较的趟数    //内层循环比较每趟比较的

C 语言 整理4

//二维数组的定义和一维数组的定义十分相似,只不过和一维数组多了一维,    //定义数组 : 数组类型 数组名 [行数][列数] =  初值 (多个元素赋初值要加大括号) //二维数组定义时 第一位可以不给,行数可以省略,但是第二维下标必须要指定    //并且第一维下标与第二维下标都必须是常量或者是常量表达式. //字符串数组 , 只不过字符串是存储在一维的字符数组中,所以本质上是一个二维的字符数组. //数组名代表数组的首地址,是一个常量地址,不可被修改. //对字符串进行赋值操作时,要使