指针和const修饰符
Created|Updated|programming languages
|Post Views:
前言
声明一个int类型的指针
int * p一个变量
int x随即,赋地址
p = &x;到了这里,p就是x变量的地址。
*p就是x的值。
示例
const float * pfloat const * p//1.2.等价float * const pconst float * const p
所以,就懂了。
const修饰值,就不能改变值。修饰地址,就不能改变地址。
Related Articles
2020-03-18
main()中的参数是什么
前言在步入命令行编译程序和C语言的学习时,会涉及到我在编写主函数int main()中有关main参数的问题。 了解 命令行输入中会有一个又一个以空格间隔的字符串。例如:./test这是执行命令时的一个字符串。 在执行程序时,从命令行中穿给C程序的值,称为命令行参数。 main中的参数 int main(int argc, char ** argv)argc是argument count (参数的数量)argv是argument vector (参数的向量) char, char*, char** 123char //字符类型char* //字符串char** //字符串数组 示例当我们用命令行编译的时候,执行c文件的时候。./test x y z如果我们在c文件中输出argc和argv,便会知道到argc=4,argv中分别是./test x y z 结果argc是命令行的参数的个数argv是命令行中参数的字符串
2022-01-23
Basic_Syntax
数据类型基本类型 整型int(4B=32b,可以表示2^32) long long(8B=64b,可以表示2^64个数) 1234567#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main() { int a, b; scanf("%d %d", &a,&b); printf("%d", a+b);} 字符型char(1B=8b) 用单引号''括起来的,只能包含一个字符 1234567#include<stdio.h>int main() { char c = 'a'; printf("%c", c); return 0;} 浮点型 单精度float(4B=32b) 双精度double(8B=32b) 字符串常量 使用双引号""将字符串括起来。 控制字符 字符串里...
2020-04-06
面向行fgets()和fputs()
前言该函数是面向行操作。不同于,getc()是处理字符 函数fgets() 作用把读入的内容添加到字符串中。 参数(字符串地址,字符个数,FILE指针) 返回值如果读到文件结尾(EOF),返回NULL如果还没有到EOF,返回之前传给它的字符串地址 范围 1.读取到第一个换行符后面。2.读到文件结尾3.读到字符个数-14.如果读到字符上限已经读完一行,则会把结尾的’\n’放在’\0’前面最后,在最后一个字符后面加’\0’ Don’t forget !字符串的大小是:字符个数+最后的空字符 fputs() 参数(字符串地址,FILE指针) fgets()保留了换行符,fputs()不会再添加换行符不同于puts()函数会在末尾添加换行符 strstr() 作用查找字符串中要查找的字符串 参数(被查找的字符串str1,需要的字符串str2) 返回值返回str1中str2的首位置 示例显示含有某个字符的一整行12345678910111213141516171819202122232425262728293031323334#include<stdio.h...
2020-03-19
字符串数组
了解 char *和char **和char *arr[]是指针类型。字节是8(64位操作系统)。(int *也一样)而数组 char arr[1][1]字节是1。 char *arr[]是定义了多个指针。把数组写成指针时按顺序替换。 说明 char* arr 和 char arr[x]的区别。为什么要给数组赋值,因为要给它开内存,等同于意义char arr[] = "string"而char* arr是定义指针变量。没赋地址的时候是乱指的,野指针。 所以,char* arr[]是定义了多个地址变量。char arr[x][y]是需要开辟应有的内存的。这就是scanf能直接读入char arr[x][y]而不能读入char* arr[]的原因。 示例1234567char* arr[3]; //因为 char* x; x的地址为&x//soprintf("%p %p %p\n", &arr[0], &arr[1], &arr[2]);//指针的地址//自然而然printf("%p %p %p\...
2020-04-27
字符串输入输出
前言 当我们进行字符串输入时,scanf函数和转换说明%s只能读取一个单词。所以,要进行整行输入,需要用到gets puts()一定要是字符串,即最后需要有’\0’ 函数gets() 参数(字符数组地址) 说明遇到’\n’结束,丢弃’\n’,在最后加上’\0’。这使得gets()可以于puts()有很好的配合 缺点缓冲区溢出,破坏栈中的内容。当我们传入字符串数组的首地址时,gets只知道元素的开始处。这样会导致缓冲区溢出。它在遇到 EOF 字符或换行字符之前,不会停止读入文本。也就是:gets() 根本不执行边界检查。因此,使用 gets() 总是有可能使任何缓冲区溢出。 puts() 参数(字符数组地址) 说明遇到’\0’结束,并且在最后加上’\n’ 示例逐个字符输入,pus()要加上'\0'123456789101112131415#include<stdio.h>int main(){ char str1[] = "we are learning C language."; char str2[40] = &qu...
2020-04-09
指向结构的指针
前言结构指针与结构数组,他们一起使用时会更加方便。就像指针和数组。 结构指针的声明struct guy * him 指向 him = &fellow[0]但是有一点需要注意:单纯的结构数组名没有作用数组的变量名是数组的首元素地址。结构数组的变量名不是结构数组的首结构地址。所以但要将首结构的地址赋给指针时,要加上&和[0] 用指针访问him->handle.first//意义:用him指针指向成员的成员等价于(*him).handle.first//意义:取值为结构struct guy fellow[0]这个结构这里必须要用(),因为.比*的优先级高。 示例12345678910111213141516171819202122232425262728293031323334353637383940414243/* friends.c -- uses pointer to a structure */#include <stdio.h>#define LEN 20struct names {...
