zoukankan      html  css  js  c++  java
  • C语言学习笔记

    C 语言是一种通用的、面向过程式的计算机程序设计语言。

    指针与字符串


    Part 1. 取地址运算

    1. sizyof;

    运算符,给出某个类型或变量在内存中所占据的字节数

    sizeof(int);                       sizeof(i);
    
    	int a = 6;
    	printf("sizeof(int) = %ld
    ",sizeof(int));
    	printf("sizeof(int) = %ld
    ",sizeof(a));
            //输出结果均为4;
    

    2.运算符 &;

    获得变量地址,它的操作数必须是变量

    int a[10];
    	printf("%p
    ",&a);
    	printf("%p
    ",a);
    	printf("%p
    ",&a[0]);
    	//将输出三个相同值
    	printf("%p
    ",&a[1]);
    	//一般相邻地址间距是4;
    

    地址的大小是否与int相同取决与编译器(32位或64位)。



    Part 2. 指针

    1. 指针

    保存地址的变量;指针变量的值为地址的值。

    • 指针的定义:类型名 *指针变量名(合法的标识符);
    int *p;							/*定义一个指针变量p,指向整型变量*/
    double *dp1, *dp2;				/*定义两个指针变量dp1和dp2,指向双精度型变量*/
    

    定义多个指针变量时,每个指针变量前面必须加上*

    • 指针变量的赋值:
    p = &i;
    p = 0;
    p = NULL;			
    p = (int*)1732;		//P指向地址为1732的int型变量。
    

    (1)int *p; p是指针变量
    (2)指针变量的数据类型是它所指向的变量的类型,一般情况下一旦指针变量的类型被确定后,它只能指向 同种类型 的变量。

    2. 单目运算符 *

    • 定义指针变量时被使用,说明被定义的那个变量是指针;
    • 用来访问指针的值所表示的地址上的变量;
    • 可以做左值也可以做右值;
      • int k = *p;
      • *p = k + 1;

    3. 指针的使用

    • 函数返回多个值,某些值就只能通过指针返回;
    • 传入的参数实际上是需要保存带回的结果变量;
    • 先定义并赋值再引用;
    • 常见错误:定义了指针变量,还没有指向任何变量,就开始使用指针。
    int a;
    int *p1 = &a;			/*在定义指针p1的同时时给其赋值,使指针p1指向变量a*/
    int *p2 = p1;			/*在定义指针p2的同时时给其赋值,使p2和p1值相同*/
    

    MOOC中出现的代码

    个人笔记

    PTA 练习

    假装自己很厉害
    没错我就是很厉害

    #include <stdio.h>
    float fun(int a[],int n,int *max,int *min);		     /*函数类型为浮点型,即返回值为浮点型*/
    int main()
    {
    int x[10],i,m,n;
    float p;
    for(i=0;i<10;i++)
      scanf("%d",&x[i]);
    p=fun(x,10,&m,&n);								
    printf("max=%d,min=%d,average=%.2f
    ",m,n,p);	         /*输出结果p为函数返回值*/
    return 0;
    }
    
    float fun(int a[],int n,int *max,int *min)
    {
    	*min = *max = a[0];
    	int i;
    	float sum = 0;								 
    	for(i = 0; i < n; i++)
    	{
    		if(a[i] > *max)
    		*max = a[i];
    		if(a[i] < *min)
    		*min = a[i];
    	sum += a[i];
    	}
    	
    	return sum/n; 								
     } 
    
    //为了使 sum/n(函数返回值) 为浮点型数 因此要将sum定义为浮点型。
    

    问题及解决

    • 输出格式控制问题。
      解决方案:查数书

    • MOOC中最大最小值问题
    #include<stdio.h>
     
    void minmax(int a[], int len, int *max, int *min);                    /*用len记录记录数组长度*/
                                                                         
    int main(void)                                                           
    {                    
    	int a[] = {1,2,3,4,5,6,7,8,9,11,12,13,14,16,17,21,23,55,};
    	int min, max;
    	minmax(a, sizeof(a)/sizeof(a[0]), &min, &max);                 /*sizeof(a)/sizeof(a[0])确定数组长度*/
    	printf("min = %d, max = %d
    ", min, max);
    	
    	return 0;
    } 
    void minmax( int a[], int len, int *min, int *max)
    {
    	int i;
    	*min = *max = a[0];
    	for(i = 1; i < len; i++){
    		if(a[i] < *min){
    			*min = a[i];
    		}
    		if(a[i] > *max){
    			*max = a[i];
    		}
    	}
     } 
    // 函数参数表里的数组实际上是指针,但是可以用数组的运算符[]进行运算。
    // 在子函数中,sizeof(a) == sizeof(int *) ;
    //这就是为什么函数参数表里要用另外一个变量len记录数组长度,而不能直接用sizeof(a) / sizeof(a[0])计算。
    
  • 相关阅读:
    Flask 的 请求扩展 与 中间件
    Flask的配置文件 与 session
    django中的FBV和CBV
    Flask开启多线程、多进程
    WPF获取原始控件样式
    一个40岁老码农的总结,奋斗没有意义,选择大于努力
    FastText 分析与实践
    Flask的多app应用,多线程如何体现
    Python 远程调用MetaSploit
    GitLab 7.5.3 CentOS7安装和SMTP配置
  • 原文地址:https://www.cnblogs.com/ABClazyboy/p/12400734.html
Copyright © 2011-2022 走看看