`

C语言基础七

    博客分类:
  • c
c 
阅读更多

指针变量用来记录地址数据,可以通过指针变量找到其他变量。
指针变量声明方法如下
int *p_value = NULL, *p_value1 = NULL;
其中p_value和p_value1是指针变量名称,*表示变量是指针类型,int表示通过这两个指针变量可以找到整数类型数据。NULL是空地址,所有不能使用的指针变量都应该记录空地址。

指针变量占有4个字节的空间
指针变量的类型和地址数据所对应的变量类型不一定一致

当一个函数需要对其他函数的变量进行操作而不仅仅操作数据,这时就应该使用地址作为参数,形参应该声明成指针类型。

如果希望一个函数的返回值代表一个变量而不仅仅一个数字的话就应该使用变量地址作为返回值,返回值类型应该声明成指针类型。
局部变量的地址不能作为函数的返回值

void*类型的指针可以用来记录任意来源的地址数据,这种指针在使用之前要先强制类型转换成特定类型指针。

记录无效地址的指针叫做野指针,无法把野指针和正常指针区分开。
1.没有初始化的指针
2.地址数据对应的变量已经超过了生命周期
3.堆中变量被销毁,指针中仍然记录他们的地址

NULL叫做空地址,它就是数字0。记录空地址的指针叫做空指针。

字符串是由一组连续的字符构成的,我们用第一个字符的地址表示它们。所有字符串必须以'\0'作为结尾。

可以使用双引号中间的一组字符表示字符串,这种表示方法叫做字面值。gcc在编译字面值的时候会把它转换成首字母地址并且自动在后面加上'\0'字符。在运行的时候这种字符串被放置在一个特定的段落里,这个段落是不可以修改的。相同的字面值在程序运行的时候对应着同一个字符串。两个连续的字符串字面值会被合并成一个。

字符数组也可以用来表示字符串,必须保证以'\0'作为结束字符。

使用printf函数可以把一个字符串显示在屏幕上,要使用%s作为占位符。也可以使用scanf函数从键盘读一个字符串,但是有可能会出现溢出问题。fgets函数可以保证安全的从键盘读入一个字符串,有可能会把最后的'\n'字符也读入到字符数组中。

为了使用C语言中的字符串函数需要包含头文件string.h
strlen函数可以获得字符串中有效字符的个数
strcat函数可以把两个字符串合并成一个,strncat函数可以避免合并过程中的溢出
strcpy函数可以实现字符串的赋值操作,strncpy函数可以避免赋值过程中的溢出
strcmp函数可以比较两个字符串的大小,strncmp函数只比较前几个字符



/*
	地址数据练习
*/
#include <stdio.h>
int main() {
    int value = 0;
	 int values[] = {1, 2, 3};
	 printf("&value是%p\n", &value);
	 printf("values是%p\n", values);
	 printf("*values是%d\n", *values);
    return 0;
}


/*
	指针变量练习
*/
#include <stdio.h>
int main() {
    int value = 0;
	 int values[] = {1, 2, 3};
	 int *p_value = NULL, *p_value1 = NULL;
	 p_value = &value;
	 *p_value = 3;
	 printf("value是%d\n", value);
    p_value = values + 2;
	 *p_value = 7;
	 printf("values[2]是%d\n", values[2]);
    return 0;
}


/*
	数字交换练习
*/
#include <stdio.h>
int main() {
    int value = 3, value1 = 7;
	 int value2 = 0;
	 int *p_value = &value, *p_value1 = &value1, *p_value2 = &value2;
	 /*value2 = value1;
	 value1 = value;
	 value = value2;*/
    *p_value2 = *p_value1;
	 *p_value1 = *p_value;
	 *p_value = *p_value2;
	 printf("value是%d,value1是%d\n", value, value1);
    return 0;
}



/*
	指针变量练习
*/
#include <stdio.h>
int main() {
    int values[] = {1, 2, 3};
	 int *p_value = values;
	 char *p_char = (char*)values;
	 printf("sizeof(p_value)是%d,sizeof(*p_value)是%d\n", sizeof(p_value), sizeof(*p_value));
	 printf("sizeof(p_char)是%d,sizeof(*p_char)是%d\n", sizeof(p_char), sizeof(*p_char));
    return 0;
}


/*
	指针练习
*/
#include <stdio.h>
int main() {
    int values[] = {1, 2, 3, 4};
	 int *p_value = values, loop = 0;
	 for (loop = 0; loop <= 3; loop++) {
        //printf("%d ", values[loop]);
        //printf("%d ", p_value[loop]);
        //printf("%d ", *(p_value + loop));
        printf("%d ", *p_value);
		  p_value++;
	 }
	 printf("\n");
    return 0;
}


/*
	指针参数练习
*/
#include <stdio.h>
void negs(int *p_values, int num) {
    int loop = 0;
	 for (loop = 0; loop <= (num - 1); loop++) {
        //p_values[loop] = 0 - p_values[loop];
        *(p_values + loop) = 0 - *(p_values + loop);
	 }
}
int main() {
    int values[] = {4, -9, 2}, loop = 0;
	 negs(values, 3);
    for (loop = 0; loop <= 2; loop++) {
        printf("%d ", values[loop]);
	 }
	 printf("\n");
    return 0;
}


/*
	指针参数练习
*/
#include <stdio.h>
void swap(int *p_value, int *p_value1) {
    int tmp = *p_value;
	 *p_value = *p_value1;
	 *p_value1 = tmp;
}
int main() {
    int value = 3, value1 = 7;
	 swap(&value, &value1);
	 printf("value是%d,value1是%d\n", value, value1);
    return 0;
}


/*
	指针参数练习
*/
#include <stdio.h>
void square(int *p_value) {
    *p_value *= *p_value;
}
int main() {
    int value = -3;
	 square(&value);
	 printf("value是%d\n", value);
    return 0;
}



/*
	指针练习
*/
#include <stdio.h>
int *max(int *p_value, int *p_value1) {
    if (*p_value > *p_value1) {
        return p_value;
	 }
	 else {
        return p_value1;
	 }
}
int *f() {
    int value = 0;
	 return &value;    //局部变量地址不能作为函数返回值使用
}
int main() {
    int value = 3, value1 = 7;
	 int *p_value = max(&value, &value1);
	 printf("*p_value是%d\n", *p_value);
    return 0;
}


/*
	void*指针练习
*/
#include <stdio.h>
int main() {
    int value = 3;
	 char ch = 'a';
	 float f = 4.6f;
	 void *p_value = &value;
	 *(int*)p_value = 7;
	 p_value = &ch;
	 *(char*)p_value = 'z';
	 p_value = &f;
	 *(float*)p_value = 1.5f;
    return 0;
}


/*
	字符串练习
*/
#include <stdio.h>
int main() {
    char *p_str = "abc";
	 char *p_str1 = "abc";
	 char *p_str2 = "abc""xyz";
	 //*p_str = 'z';
	 printf("*(p_str + 3)是%d\n", *(p_str + 3));
	 printf("p_str是%p,p_str1是%p\n", p_str, p_str1);
	 printf("*(p_str2 + 3)是%c\n", *(p_str2 + 3));
    return 0;
}


/*
	字符串练习
*/
#include <stdio.h>
int main() {
    char *p_str = "abc";
	 char *p_str1 = "abc";
	 char *p_str2 = "abc""xyz";//"" 略过
	 //*p_str = 'z';
	 printf("*(p_str + 3)是%d\n", *(p_str + 3));//0
	 printf("p_str是%p,p_str1是%p\n", p_str, p_str1);//一样
	 printf("*(p_str2 + 3)是%c\n", *(p_str2 + 3));//x
    return 0;
}

/*
	字符串练习
*/
#include <stdio.h>
int main() {
    //char str[] = "abc";
    //char str[3] = "abc";  //‘\0’丢失
    char str[] = {'a', 'b', 'c', '\0'};
	 printf("sizeof(str)是%d\n", sizeof(str));
	 str[1] = 'y';
    return 0;
}


/*
	字符窜练习
*/
#include <stdio.h>
int main() {
    char buf[10];
	 //scanf("%s", buf);
	 fgets(buf, 10, stdin);
    printf("%s\n", buf);
    return 0;
}


/*
	字符串函数练习
*/
#include <stdio.h>
#include <string.h>
int main() {
    char buf[20] = "abc";
	 char *p_str = NULL;
    printf("字符串长度是%d\n", strlen("abcdef"));
    p_str = strcat(buf, "xyz");
	 printf("合并后的字符串是%s\n", p_str);
	 p_str = strcpy(buf, "hello");
	 printf("复制后的字符串内容是%s\n", p_str);
	 printf("比较结果是%d\n", strcmp("abc", "abd"));
	 printf("比较结果是%d\n", strcmp("abd", "abc"));
	 printf("比较结果是%d\n", strcmp("abc", "abc"));
    return 0;
}



/*
	模拟登陆练习
*/
#include <stdio.h>
#include <string.h>
int main() {
    char buf[20];
	 int loop = 0;
	 for (loop = 0; loop < 3; loop++) {
        printf("请输入用户名:");
		  fgets(buf, 20, stdin);
		  if (strcmp(buf, "admin\n")) {
            continue;
		  }
		  printf("请输入密码:");
		  fgets(buf, 20, stdin);
		  if (!strcmp(buf, "123456\n")) {
            break;
		  }
	 }
	 if (loop < 3) {
        printf("登陆成功\n");
	 }
	 else {
        printf("登陆失败\n");
	 }
    
    return 0;
}



0
0
分享到:
评论

相关推荐

    C语言基础教程(全)

    本教程“C语言基础教程(全)”旨在为初学者提供全面且深入的C语言学习指导。 教程内容可能包括以下几个方面: 1. **C语言概述**:介绍C语言的历史、特点和应用领域,让学习者对C语言有一个初步的认识。 2. **基本...

    C语言基础教程 吕凤翥

    《C语言基础教程》是吕凤翥先生撰写的一本经典C语言教材,尤其适合初学者入门。这本书以其清晰的语言和实例解析,深受广大编程爱好者的喜爱。在学习C语言的过程中,掌握其基础知识至关重要,因为C语言是许多现代编程...

    C语言基础课件 ppt

    《C语言基础课件》是针对初学者及计算机考级者设计的一套全面而详细的教程,旨在帮助读者从零开始掌握C语言的基础知识。这套课件由清华大学出版社出版,其内容涵盖C语言的核心概念和常见编程技巧。通过PPT的形式,...

    C语言基础学习包

    【标题】"C语言基础学习包"所涵盖的知识点主要围绕C语言的基础概念、语法结构、数据类型、控制结构、函数、数组、指针等方面展开。C语言是一种强大的、低级的编程语言,广泛用于系统编程、嵌入式开发、软件工程等多...

    c语言基础教材 零基础学习c语言

    "C语言基础教材"是一份专为初学者设计的学习资源,旨在帮助零基础的学习者逐步掌握C语言的核心概念和技术。 这份教材以HTML格式提供,方便在网页浏览器中阅读和学习,同时也便于检索和打印。HTML文档通常包含丰富的...

    C语言基础教程---电子教案

    C语言基础教程是一门针对初学者的编程课程,旨在教授如何使用C语言进行程序设计。C语言是一种广泛应用的计算机编程语言,因其高效、灵活和强大的功能而被广泛应用于系统编程、软件开发、嵌入式系统等多个领域。本...

    C语言基础.ppt

    **C语言基础** C语言是一种强大的、通用的编程语言,起源于1972年,由丹尼斯·里奇在贝尔实验室开发。它是许多现代编程语言的基石,因其高效、灵活和可移植性而广受程序员喜爱。"C语言基础.ppt"这份教程将引导初学...

    C语言基础练习面试题

    本资源“C语言基础练习面试题”是针对初学者和有一定经验的开发者设计的一系列练习,旨在帮助他们巩固C语言基础知识,提升编程技能,并为面试做好准备。 在C语言的基础部分,这些练习涵盖了以下几个关键知识点: 1...

    C语言基础 C语言基础 C语言基础 C语言基础.zip

    7. **函数**:函数是C语言中可重用的代码块,可以接收参数并返回值。函数定义、声明和调用是编写模块化程序的关键。 8. **指针**:C语言的指针是其强大之处,它允许我们直接操作内存。指针变量存储了其他变量的地址...

    C语言课件(C语言基础)

    7. **指针**:第10章是C语言的一大特色,指针能够直接操作内存地址,理解并熟练使用指针能大幅提升编程能力。内容包括指针的声明、初始化、指针运算和动态内存管理。 8. **结构体和共用体**:第11章介绍了结构体和...

    c语言基础练习题及答案

    根据给定的C语言基础练习题及其描述,我们可以总结出一系列重要的C语言知识点,这些知识点不仅对于在校大学生,而且对于所有初学者都是极其宝贵的。下面将详细解释这些知识点: ### 1. C语言标识符规则 C语言中的...

    C语言基础程序代码合集

    本资源“C语言基础程序代码合集”旨在为初学者提供一系列基础的C语言程序示例,帮助他们理解和掌握C语言的核心概念。 在C语言中,基础知识点主要包括以下几个方面: 1. **基本数据类型**:C语言有几种基本的数据...

    C语言基础知识PPT文件

    这个“C语言基础知识PPT文件”显然是一份面向初学者的学习资料,旨在帮助用户掌握C语言的基本概念和语法。 首先,C语言的基础部分通常包括以下几个方面: 1. **数据类型**:C语言提供了多种基本数据类型,如整型...

    C语言基础知识大全

    《C语言基础知识大全》这份文档深入浅出地介绍了C语言的核心概念与编程技巧,是学习C语言不可或缺的宝典。以下是从标题、描述、标签以及部分内容中提炼的关键知识点,旨在帮助初学者快速掌握C语言的基本原理与应用。...

    WINCC C语言基础培训教程.pdf

    根据提供的文件内容,我们得知文件标题为“WINCC C语言基础培训教程.pdf”,描述为“WINCC C语言基础培训教程 轻松掌握WINCC C语言的基础”,以及标签为“WINCC”。文件内容涉及到编程语言C在WINCC(Windows Control...

    C语言基础 C语言基础 .zip

    学习C语言基础,不仅能够理解程序的基本结构和逻辑,还能为深入学习操作系统、编译原理等高级主题打下坚实基础。通过不断的实践和项目经验积累,你可以掌握C语言的精髓,成为一名出色的程序员。

    C语言基础学习(PPt格式)

    本资源集合为"C语言基础学习",包含PPT格式的学习资料,适合C语言初学者,也可作为教师的教学辅助材料。 在C语言基础学习中,主要涵盖以下几个关键知识点: 1. **基本数据类型**:C语言提供了多种基本数据类型,...

    c语言基础学习资料/包含课程PPT

    7. **预处理指令**:如#define用于宏定义,#include用于导入头文件,#ifdef/#endif用于条件编译等,这些都是C语言预处理阶段的重要组成部分。 8. **文件操作**:C语言提供了标准I/O库,可以进行文件的打开、读写、...

    C语言基础小程序

    "C语言基础小程序"这个压缩包包含了你在学习C语言过程中可能会用到的一些基本代码示例,这些小程序对理解和实践C语言的基本概念非常有帮助。 1. **C语言概述**: C语言由贝尔实验室的Dennis Ritchie在1972年开发,...

Global site tag (gtag.js) - Google Analytics